Compare commits

...
23 Commits
Author SHA1 Message Date
Tim Edwards b2662b443f Merge branch 'master' into netgen-1.5 2025-11-25 02:00:02 -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 <[email protected]>
2025-11-24 12:26:30 -05:00
Tim Edwards 1acef6c52c Merge branch 'master' into netgen-1.5 2025-11-22 02:00:02 -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
Tim Edwards 7459b6dfe8 Merge branch 'master' into netgen-1.5 2025-11-13 02:00:02 -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
Tim Edwards 7f2ab31143 Merge branch 'master' into netgen-1.5 2025-11-12 02:00:02 -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
Tim Edwards 45164bbf98 Merge branch 'master' into netgen-1.5 2025-11-08 02:00:04 -05:00
R. Timothy Edwards 2ee286efb4 Corrected the pin permutation check for pin matching; previously,
this was not doing the correct cross-check, instead looking in the
same netlist for the permutable pin and checking its node number,
which is useless since the node number is the same by definition
for permutable pins.  This error would result in occasional false
negative results during pin matching, showing matching where pins
are actually not matched.
2025-11-07 14:06:22 -05:00
Tim Edwards 46cb8d6637 Merge branch 'master' into netgen-1.5 2025-10-24 02:00:04 -04:00
R. Timothy Edwards dae6919d4f Updating the version to go along with the merge of pull request 2025-10-23 09:54:36 -04:00
D. Mitch Bailey 017bdc6e48 Changed nested to static variable. Otherwise gets reset with each line.
Signed-off-by: D. Mitch Bailey <[email protected]>
2025-10-23 08:30:08 +00:00
Tim Edwards 2825b786b7 Merge branch 'master' into netgen-1.5 2025-10-23 02:00:04 -04:00
R. Timothy Edwards b371af9235 Corrected an error that was assumed to have been fixed three years
ago (and may have been, but only under limited circumstances).  Do
to several errors, using "-noflatten" on the command line and using
"flatten prohibit" in a script would not prevent cells from being
flattened;  the "-noflatten" list needed to be used to call "flatten
prohibit", and "flatten prohibit" needed to be fixed to flag the
specified cell instead of the top level cell where it exists.
2025-10-22 10:43:00 -04:00
Tim Edwards 0af8c7ad49 Merge branch 'master' into netgen-1.5 2025-10-10 02:00:03 -04:00
R. Timothy Edwards b5432d139b Corrected a corner-case where a module with no ports in verilog
was creating an implicit net for the stand-in "(no pins)" port.
2025-10-09 10:36:41 -04:00
Tim Edwards 0aa20dcf62 Merge branch 'master' into netgen-1.5 2025-10-09 02:00:04 -04:00
R. Timothy Edwards 0e958bd45c Corrected an issue in which black-box entries (such as low-level
subcircuit devices) do not output information about mismatched
pins.  This can end up being treated as a non-error but the
mismatch should be noted in the output regardless.
2025-10-08 10:03:35 -04:00
11 changed files with 264 additions and 173 deletions
+1 -1
View File
@@ -1 +1 @@
1.5.301
1.5.310
+1
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 */
+67 -24
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,16 +1755,26 @@ 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)"
" would make a better match but is prohibited.\n",
ecomp->cell1->name, name1, file1);
}
if (ecomp->cell2 && (ecomp->num2 > 0) &&
(!(ecomp->cell2->flags & CELL_PLACEHOLDER))) {
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)"
" would make a better match but is prohibited.\n",
ecomp->cell2->name, name2, file2);
}
}
@@ -1851,8 +1863,13 @@ 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)"
" would make a better match but is prohibited.\n",
ecomp->cell2->name, name2, file2);
}
}
}
@@ -1917,8 +1934,13 @@ 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)"
" would make a better match but is prohibited.\n",
ecomp->cell1->name, name1, file1);
}
}
}
@@ -2271,13 +2293,24 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
ecompX0->cell1->file, &compdict);
if (dstr) *dstr = '[';
if ((ncomp == ecomp0X) && (ecomp0X->num2 <= ecompX0->num1)) {
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 (!(ecompX0->cell1->flags & CELL_PLACEHOLDER)) {
Fprintf(stdout, "Flattening instances of %s in cell"
" %s (%d) makes a better match\n",
ecompX0->cell1->name, name1, file1);
if (flattenInstancesOf(name1, file1,
ecompX0->cell1->name) > 0) {
ecompX0->num1 = 0;
ecomp0X->num1 += ecompX0->num1;
modified1++;
}
}
else
{
Fprintf(stdout, "Flattening instances of %s in "
"cell %s (%d) would make a better "
"match but is prohibited.\n",
ecompX0->cell1->name, name1, file1);
}
break;
}
}
@@ -2297,13 +2330,23 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
ecomp0X->cell2->file, &compdict);
if (dstr) *dstr = '[';
if ((ncomp == ecompX0) && (ecompX0->num1 <= ecomp0X->num2)) {
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 (!(ecomp0X->cell2->flags & CELL_PLACEHOLDER)) {
Fprintf(stdout, "Flattening instances of %s in cell"
" %s (%d) makes a better match\n",
ecomp0X->cell2->name, name2, file2);
if (flattenInstancesOf(name2, file2,
ecomp0X->cell2->name) > 0) {
ecomp0X->num2 = 0;
ecompX0->num2 += ecomp0X->num2;
modified2++;
}
}
else {
Fprintf(stdout, "Flattening instances of %s in "
"cell %s (%d) would make a better "
"match but is prohibited.\n",
ecompX0->cell2->name, name2, file2);
}
break;
}
}
+22 -5
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;
@@ -8009,21 +8010,21 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
*/
for (permute1 = tc1->permutes; permute1; permute1 = permute1->next) {
if ((*matchfunc)(ob1->name, permute1->pin1)) {
ob1a = LookupObject(permute1->pin1, tc1);
ob2a = LookupObject(permute1->pin2, tc2);
break;
}
else if ((*matchfunc)(ob1->name, permute1->pin2)) {
ob1a = LookupObject(permute1->pin2, tc1);
ob2a = LookupObject(permute1->pin1, tc2);
break;
}
}
for (permute2 = tc2->permutes; permute2; permute2 = permute2->next) {
if ((*matchfunc)(ob2->name, permute2->pin1)) {
ob2a = LookupObject(permute2->pin1, tc2);
ob1a = LookupObject(permute2->pin2, tc1);
break;
}
else if ((*matchfunc)(ob2->name, permute2->pin2)) {
ob2a = LookupObject(permute2->pin2, tc2);
ob1a = LookupObject(permute2->pin1, tc1);
break;
}
}
@@ -8196,6 +8197,14 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
hasproxy1 = 1;
HashPtrInstall(obn->name, obn, &(tc1->objdict));
/* If this is a black-box circuit, then the pin has not been output */
if (NodeClasses == NULL) {
output_string_fill(ostr);
output_string_left(ostr, "%s", "(no matching pin)");
output_string_right(ostr, "%s", ob2->name);
output_string_print(ostr);
}
}
}
@@ -8266,6 +8275,14 @@ int MatchPins(struct nlist *tc1, struct nlist *tc2, int dolist)
hasproxy2 = 1;
HashPtrInstall(obn->name, obn, &(tc2->objdict));
/* If this is a black-box circuit, then the pin has not been output */
if (NodeClasses == NULL) {
output_string_fill(ostr);
output_string_left(ostr, "%s", ob1->name);
output_string_right(ostr, "%s", "(no matching pin)");
output_string_print(ostr);
}
}
else if (ob1 != NULL && ob1->type == PORT && ob1->node < 0) {
+1 -1
View File
@@ -302,7 +302,7 @@ int GetNextLineNoNewline(char *delimiter)
{
char *newbuf;
int testc;
int nested = 0;
static int nested = 0;
int llen;
if (feof(infile)) return -1;
+2
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>
+3
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
+7 -5
View File
@@ -2614,13 +2614,15 @@ nextinst:
if (scan == NULL) {
char localnet[MAX_STR_LEN];
/* Assume an implicit unconnected pin */
sprintf(localnet, "_noconnect_%d_", localcount++);
Node(localnet);
join(localnet, obptr->name);
Fprintf(stdout,
/* Assume an implicit unconnected pin, unless there are no pins */
if (strcmp(obpinname, "(no pins)")) {
sprintf(localnet, "_noconnect_%d_", localcount++);
Node(localnet);
join(localnet, obptr->name);
Fprintf(stdout,
"Note: Implicit pin %s in instance %s of %s in cell %s\n",
obpinname, locinst, modulename, CurrentCell->name);
}
}
else if (GetBus(scan->net, &wb) == 0) {
char *bptr2;
+2 -1
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@
+16 -4
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
@@ -477,6 +477,18 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
set cell2 [lindex $clist2 $cidx]
}
# The "noflat" list is non-file-specific, so run on each file.
foreach cell $noflat {
set cidx [lsearch -regexp $clist1 ^$cell$]
if {$cidx >= 0} {
netgen::flatten prohibit "$fnum1 $cell"
}
set cidx [lsearch -regexp $clist2 ^$cell$]
if {$cidx >= 0} {
netgen::flatten prohibit "$fnum2 $cell"
}
}
netgen::compare assign "$fnum1 $cell1" "$fnum2 $cell2"
if {$setupfile == ""} {
+142 -132
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,11 +1020,11 @@ _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;
struct nlist *tp, *tp2;
int result, filenum;
struct nlist *tp, *tp2, *tptop;
if ((objc < 2) || (objc > 4)) {
Tcl_WrongNumArgs(interp, 1, objv, "?class? valid_cellname");
@@ -1035,7 +1038,7 @@ _netgen_flatten(ClientData clientData,
if (objc >= 3) {
char *argv = Tcl_GetString(objv[1]);
if (!strcmp(argv, "class")) {
tp = GetTopCell(filenum);
tptop = GetTopCell(filenum);
if (objc == 4) {
int numflat;
@@ -1046,7 +1049,7 @@ _netgen_flatten(ClientData clientData,
}
else {
Printf("Flattening instances of %s in cell %s within file %s\n",
repstr, tp2->name, tp->name);
repstr, tp2->name, tptop->name);
numflat = flattenInstancesOf(tp2->name, filenum, repstr);
if (numflat == 0) {
Tcl_SetResult(interp, "No instances found to flatten.", NULL);
@@ -1055,15 +1058,19 @@ _netgen_flatten(ClientData clientData,
}
}
else {
Printf("Flattening instances of %s in file %s\n", repstr, tp->name);
Printf("Flattening instances of %s in file %s\n", repstr, tptop->name);
FlattenInstancesOf(repstr, filenum);
}
}
else if (!strcmp(argv, "prohibit") || !strcmp(argv, "deny")) {
tp = GetTopCell(filenum);
Printf("Will not flatten instances of %s in file %s\n", repstr, tp->name);
/* Mark cell as placeholder so it will not be flattened */
tp->flags |= CELL_PLACEHOLDER;
tptop = GetTopCell(filenum);
if (tp == NULL)
Printf("Error: Cell %s does not exist.\n", repstr);
else {
Printf("Will not flatten instances of %s in file %s\n", repstr, tptop->name);
/* Mark cell as placeholder so it will not be flattened */
tp->flags |= CELL_PLACEHOLDER;
}
}
else {
Tcl_WrongNumArgs(interp, 1, objv, "class valid_cellname");
@@ -1087,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;
@@ -1205,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)();
@@ -1300,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
@@ -1314,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;
}
@@ -1349,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)");
@@ -1369,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;
@@ -1399,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;
@@ -1428,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;
@@ -1458,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;
@@ -1545,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;
@@ -1597,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;
}
@@ -1767,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;
@@ -1797,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;
@@ -1833,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)");
@@ -1861,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)");
@@ -1881,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
@@ -1898,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;
}
@@ -2025,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)");
@@ -2047,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;
@@ -2108,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;
@@ -2285,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)");
@@ -2309,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
@@ -2324,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;
}
@@ -2350,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
@@ -2388,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;
}
@@ -2441,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
@@ -2468,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;
}
@@ -2585,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
@@ -2617,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;
}
@@ -2774,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)");
@@ -2795,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;
@@ -2825,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) {
@@ -2862,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
@@ -2876,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++;
@@ -2910,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
@@ -2925,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) {
@@ -2955,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;
}
@@ -3424,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;
@@ -3506,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" */
@@ -3604,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;
@@ -3663,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;
@@ -3696,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)
@@ -3728,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;
@@ -3813,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)
@@ -3857,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;
@@ -4000,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;
@@ -4052,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) {
@@ -4084,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[] = {
@@ -4105,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?");
@@ -4225,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;
@@ -4241,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
@@ -4254,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;
}
@@ -4283,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)");
@@ -4303,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;
@@ -4334,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
@@ -4356,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;
}
@@ -4485,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);
}
/*------------------------------------------------------*/
@@ -4522,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;
@@ -4561,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);
@@ -4570,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);
}