From b5c70decbddbb23dc5ff1f3f5cafcb59db34a1b8 Mon Sep 17 00:00:00 2001 From: Kamyar Mohajerani Date: Tue, 16 Nov 2021 20:06:15 -0500 Subject: [PATCH 1/4] fix wrong 'hash' being linked in + C99 compat This fixes crash on macos due to wrong hash() being linked in. It also makes sure that proper function defs are declared and available (as required by C99) to make compile possible in newer compilers (e.g. Apple clang) and to some extend prevent similar linkage issues happening again. --- base/ext.c | 8 +++-- base/flatten.h | 6 ++++ base/hash.c | 4 +-- base/hash.h | 40 +++++++++++------------ base/netcmp.c | 6 +++- base/netcmp.h | 81 ++++++++++++++++++++++++++--------------------- base/netgen.h | 2 ++ base/objlist.c | 7 ++-- base/objlist.h | 13 ++++++++ base/query.c | 2 +- base/spice.c | 3 ++ base/tech.h | 8 +++++ base/verilog.c | 4 +-- base/xilinx.c | 16 ++++------ base/xilinx.h | 10 ++++++ tcltk/Makefile | 2 +- tcltk/tclnetgen.c | 4 ++- 17 files changed, 137 insertions(+), 79 deletions(-) create mode 100644 base/flatten.h create mode 100644 base/tech.h create mode 100644 base/xilinx.h diff --git a/base/ext.c b/base/ext.c index 747b1e9..8f27d7d 100644 --- a/base/ext.c +++ b/base/ext.c @@ -23,12 +23,14 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include /* for strtod() */ #include +#include +#include #include "netgen.h" -#include "hash.h" #include "objlist.h" #include "netfile.h" #include "print.h" +#include "hash.h" void extCell(char *name, int filenum) { @@ -186,7 +188,7 @@ char *ReadExt(char *fname, int doflat, int *fnum) /* Make sure all .ext file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = my_hash; if (LookupCellFile(fname, filenum) != NULL) { Printf("Error: Duplicate cell name \"%s\"!\n", fname); @@ -652,7 +654,7 @@ char *ReadSim(char *fname, int *fnum) /* Make sure all .sim file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = my_hash; CellDef(fname, filenum); diff --git a/base/flatten.h b/base/flatten.h new file mode 100644 index 0000000..605ab1b --- /dev/null +++ b/base/flatten.h @@ -0,0 +1,6 @@ +#ifndef _FLATTEN_H +#define _FLATTEN_H + +void flattenCell(char *name, int file); + +#endif /* _FLATTEN_H */ \ No newline at end of file diff --git a/base/hash.c b/base/hash.c index bd3ba58..40a2a84 100644 --- a/base/hash.c +++ b/base/hash.c @@ -30,8 +30,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "netgen.h" -#include "hash.h" #include "objlist.h" +#include "hash.h" unsigned long (*hashfunc)(char *, int) = NULL; int (*matchfunc)(char *, char *) = NULL; @@ -148,7 +148,7 @@ unsigned long hashnocase(char *s, int hashsize) return (hashsize == 0) ? hashval : (hashval % hashsize); } -unsigned long hash(char *s, int hashsize) +unsigned long my_hash(char *s, int hashsize) { unsigned long hashval; diff --git a/base/hash.h b/base/hash.h index 4bd4c3d..be5a30d 100644 --- a/base/hash.h +++ b/base/hash.h @@ -15,40 +15,40 @@ struct hashdict { }; -extern void InitializeHashTable(struct hashdict *dict, int size); -extern int RecurseHashTable(struct hashdict *dict, +void InitializeHashTable(struct hashdict *dict, int size); +int RecurseHashTable(struct hashdict *dict, int (*func)(struct hashlist *elem)); -extern int RecurseHashTableValue(struct hashdict *dict, +int RecurseHashTableValue(struct hashdict *dict, int (*func)(struct hashlist *elem, int), int); -extern struct nlist *RecurseHashTablePointer(struct hashdict *dict, +struct nlist *RecurseHashTablePointer(struct hashdict *dict, struct nlist *(*func)(struct hashlist *elem, void *), void *pointer); -extern void HashDelete(char *name, struct hashdict *dict); -extern void HashIntDelete(char *name, int value, struct hashdict *dict); -extern void HashKill(struct hashdict *dict); +void HashDelete(char *name, struct hashdict *dict); +void HashIntDelete(char *name, int value, struct hashdict *dict); +void HashKill(struct hashdict *dict); -extern int CountHashTableEntries(struct hashlist *p); -extern int CountHashTableBinsUsed(struct hashlist *p); +int CountHashTableEntries(struct hashlist *p); +int CountHashTableBinsUsed(struct hashlist *p); /* these functions return a pointer to a hash list element */ -extern struct hashlist *HashInstall(char *name, struct hashdict *dict); -extern struct hashlist *HashPtrInstall(char *name, void *ptr, +struct hashlist *HashInstall(char *name, struct hashdict *dict); +struct hashlist *HashPtrInstall(char *name, void *ptr, struct hashdict *dict); -extern struct hashlist *HashIntPtrInstall(char *name, int value, void *ptr, +struct hashlist *HashIntPtrInstall(char *name, int value, void *ptr, struct hashdict *dict); -extern struct hashlist *HashInt2PtrInstall(char *name, int c, void *ptr, +struct hashlist *HashInt2PtrInstall(char *name, int c, void *ptr, struct hashdict *dict); /* these functions return the ->ptr field of a struct hashlist */ -extern void *HashLookup(char *s, struct hashdict *dict); -extern void *HashIntLookup(char *s, int i, struct hashdict *dict); -extern void *HashInt2Lookup(char *s, int c, struct hashdict *dict); -extern void *HashFirst(struct hashdict *dict); -extern void *HashNext(struct hashdict *dict); +void *HashLookup(char *s, struct hashdict *dict); +void *HashIntLookup(char *s, int i, struct hashdict *dict); +void *HashInt2Lookup(char *s, int c, struct hashdict *dict); +void *HashFirst(struct hashdict *dict); +void *HashNext(struct hashdict *dict); -extern unsigned long hashnocase(char *s, int hashsize); -extern unsigned long hash(char *s, int hashsize); +unsigned long hashnocase(char *s, int hashsize); +unsigned long my_hash(char *s, int hashsize); extern int (*matchfunc)(char *, char *); /* matchintfunc() compares based on the name and the first */ diff --git a/base/netcmp.c b/base/netcmp.c index 4b8d19b..4430e51 100644 --- a/base/netcmp.c +++ b/base/netcmp.c @@ -21,11 +21,13 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include +#include /* for rand(), abs(), etc */ #include #include #include /* for time() as a seed for random number generator */ #include #include /* for fabs() */ +#include /* for toupper() */ #ifdef IBMPC #include @@ -35,6 +37,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef TCL_NETGEN #include +int check_interrupt(); #endif #include "netgen.h" @@ -45,6 +48,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "netfile.h" #include "print.h" #include "dbug.h" +#include "hash.h" #ifdef TCL_NETGEN int InterruptPending = 0; @@ -3757,7 +3761,7 @@ void CreateTwoLists(char *name1, int file1, char *name2, int file2, int dolist) /* determine if matching will be case sensitive or case insensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = my_hash; if (tc1 != NULL && tc2 != NULL) { if ((tc1->flags & CELL_NOCASE) && (tc2->flags & CELL_NOCASE)) { matchfunc = matchnocase; diff --git a/base/netcmp.h b/base/netcmp.h index 9d289f0..62d8da0 100644 --- a/base/netcmp.h +++ b/base/netcmp.h @@ -18,50 +18,59 @@ extern int InterruptPending; /* Exported procedures */ -extern void PrintElementClasses(struct ElementClass *EC, int type, int dolist); -extern void PrintNodeClasses(struct NodeClass *NC, int type, int dolist); -extern void SummarizeNodeClasses(struct NodeClass *NC); -extern void PrintPropertyResults(int do_list); -extern void PrintCoreStats(void); -extern void ResetState(void); -extern void CreateTwoLists(char *name1, int file1, char *name2, int file2, +void PrintElementClasses(struct ElementClass *EC, int type, int dolist); +void PrintNodeClasses(struct NodeClass *NC, int type, int dolist); +void SummarizeNodeClasses(struct NodeClass *NC); +void PrintPropertyResults(int do_list); +void PrintCoreStats(void); +void ResetState(void); +void CreateTwoLists(char *name1, int file1, char *name2, int file2, int dolist); -extern int Iterate(void); -extern int VerifyMatching(void); -extern void PrintAutomorphisms(void); -extern int ResolveAutomorphisms(void); -extern void PermuteAutomorphisms(void); -extern int Permute(void); -extern int PermuteSetup(char *model, int filenum, char *pin1, char *pin2); -extern int PermuteForget(char *model, int filenum, char *pin1, char *pin2); -extern int EquivalenceElements(char *name1, int file1, char *name2, int file2); -extern int EquivalenceNodes(char *name1, int file1, char *name2, int file2); -extern int EquivalenceClasses(char *name1, int file1, char *name2, int file2); -extern int IgnoreClass(char *name, int file, unsigned char type); -extern int MatchPins(struct nlist *tp1, struct nlist *tp2, int dolist); -extern int PropertyOptimize(struct objlist *ob, struct nlist *tp, int run, +int Iterate(void); +int VerifyMatching(void); +void PrintAutomorphisms(void); +int ResolveAutomorphisms(void); +void PermuteAutomorphisms(void); +int Permute(void); +int PermuteSetup(char *model, int filenum, char *pin1, char *pin2); +int PermuteForget(char *model, int filenum, char *pin1, char *pin2); +int EquivalenceElements(char *name1, int file1, char *name2, int file2); +int EquivalenceNodes(char *name1, int file1, char *name2, int file2); +int EquivalenceClasses(char *name1, int file1, char *name2, int file2); +int IgnoreClass(char *name, int file, unsigned char type); +int MatchPins(struct nlist *tp1, struct nlist *tp2, int dolist); +int PropertyOptimize(struct objlist *ob, struct nlist *tp, int run, int series, int comb); -extern int CreateCompareQueue(char *, int, char *, int); -extern int GetCompareQueueTop(char **, int *, char **, int *); -extern int PeekCompareQueueTop(char **, int *, char **, int *); -extern void RemoveCompareQueue(); +int CreateCompareQueue(char *, int, char *, int); +int GetCompareQueueTop(char **, int *, char **, int *); +int PeekCompareQueueTop(char **, int *, char **, int *); +void RemoveCompareQueue(); -extern void PrintIllegalClasses(); -extern void PrintIllegalNodeClasses(); -extern void PrintIllegalElementClasses(); +void PrintIllegalClasses(); +void PrintIllegalNodeClasses(); +void PrintIllegalElementClasses(); + +void DumpNetwork(struct objlist *ob, int cidx); +void DumpNetworkAll(char *name, int file); + +void RegroupDataStructures(); +void FormatIllegalElementClasses(); +void FormatIllegalNodeClasses(); +int ResolveAutomorphsByProperty(); +int ResolveAutomorphsByPin(); +void SummarizeElementClasses(struct ElementClass *EC); +int remove_group_tags(struct objlist *ob); -extern void DumpNetwork(struct objlist *ob, int cidx); -extern void DumpNetworkAll(char *name, int file); #ifdef TCL_NETGEN -extern int EquivalentNode(); -extern int EquivalentElement(); +int EquivalentNode(); +int EquivalentElement(); -extern void enable_interrupt(); -extern void disable_interrupt(); +void enable_interrupt(); +void disable_interrupt(); -extern Tcl_Obj *ListNodeClasses(int legal); -extern Tcl_Obj *ListElementClasses(int legal); +Tcl_Obj *ListNodeClasses(int legal); +Tcl_Obj *ListElementClasses(int legal); #endif diff --git a/base/netgen.h b/base/netgen.h index b60893c..982fc9b 100644 --- a/base/netgen.h +++ b/base/netgen.h @@ -18,6 +18,8 @@ #define HORIZONTAL 1 #define VERTICAL 2 +int UniquePins(char *name, int filenum); + /* netgen.c */ extern void ReopenCellDef(char *name, int file); extern void CellDef(char *name, int file); diff --git a/base/objlist.c b/base/objlist.c index 17102f2..2cdbb86 100644 --- a/base/objlist.c +++ b/base/objlist.c @@ -22,6 +22,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include +#include #ifdef IBMPC #include #endif @@ -31,13 +32,13 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "netgen.h" -#include "hash.h" #include "objlist.h" #include "regexp.h" #include "dbug.h" #include "print.h" #include "netfile.h" #include "netcmp.h" +#include "hash.h" #ifdef TCL_NETGEN extern Tcl_Interp *netgeninterp; @@ -178,7 +179,7 @@ char *strsave(char *s) int match(char *st1, char *st2) { - if (0==strcmp(st1,st2)) return(1); + if (0==strncmp(st1,st2,PATH_MAX)) return(1); else return(0); } @@ -288,7 +289,7 @@ static struct hashdict cell_dict; void InitCellHashTable(void) { - hashfunc = hash; + hashfunc = my_hash; matchfunc = NULL; matchintfunc = matchfile; InitializeHashTable(&cell_dict, CELLHASHSIZE); diff --git a/base/objlist.h b/base/objlist.h index 500018e..b3d9f4c 100644 --- a/base/objlist.h +++ b/base/objlist.h @@ -312,6 +312,19 @@ extern void GarbageCollect(void); extern void InitGarbageCollection(void); extern void AddToGarbageList(struct objlist *head); +void DeleteProperties(struct keyvalue **topptr); +void AddProperty(struct keyvalue **topptr, char *key, char *value); +void AddScaledProperty(struct keyvalue **topptr, char *key, char *value, double scale); +void DeleteProperties(struct keyvalue **topptr); +struct objlist *LinkProperties(char *model, struct keyvalue *topptr); + +void ClassDelete(char *class, int file); +void RemoveShorted(char *class, int file); +void CellRehash(char *name, char *newname, int file); + +/* defined in netgen.c */ +int ConvertStringToInteger(char *string, int *ival); + #ifdef HAVE_MALLINFO void PrintMemoryStats(void); #endif diff --git a/base/query.c b/base/query.c index b22c2d3..55147cd 100644 --- a/base/query.c +++ b/base/query.c @@ -1033,7 +1033,7 @@ void Query(void) break; case 'v': promptstring("Write Verilog: circuit name: ", repstr); - VerilogModule(repstr, filenum, ""); + VerilogTop(repstr, filenum, ""); break; case 'E': promptstring("Write ESACAP: circuit name: ", repstr); diff --git a/base/spice.c b/base/spice.c index 7c83788..95378e0 100644 --- a/base/spice.c +++ b/base/spice.c @@ -26,6 +26,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include /* for calloc(), free(), getenv() */ +#include /* for toupper(), isascii() */ #ifndef IBMPC #include /* for getpwnam() tilde expansion */ #include @@ -40,6 +41,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "objlist.h" #include "netfile.h" #include "print.h" +#include "query.h" +#include "objlist.h" // Global storage for parameters from .PARAM struct hashdict spiceparams; diff --git a/base/tech.h b/base/tech.h new file mode 100644 index 0000000..82d31c4 --- /dev/null +++ b/base/tech.h @@ -0,0 +1,8 @@ +#ifndef _TECH_H +#define _TECH_H + +int ActelLibPresent(void); +void ActelLib(void); +void VerilogTop(char *name, int fnum, char *filename); + +#endif /* _TECH_H */ \ No newline at end of file diff --git a/base/verilog.c b/base/verilog.c index f5ac6b0..5b92a90 100644 --- a/base/verilog.c +++ b/base/verilog.c @@ -52,10 +52,10 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "netgen.h" -#include "hash.h" #include "objlist.h" #include "netfile.h" #include "print.h" +#include "hash.h" // See netfile.c for explanation of delimiters. 'X' // separates single-character delimiters from two-character delimiters. @@ -2239,7 +2239,7 @@ char *ReadVerilogTop(char *fname, int *fnum, int blackbox) else { matchfunc = match; matchintfunc = matchfile; - hashfunc = hash; + hashfunc = my_hash; } InitializeHashTable(&verilogparams, OBJHASHSIZE); diff --git a/base/xilinx.c b/base/xilinx.c index b448364..71beda2 100644 --- a/base/xilinx.c +++ b/base/xilinx.c @@ -23,6 +23,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include +#include #ifdef IBMPC #include /* for strtol on PC */ @@ -33,6 +34,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "netfile.h" #include "hash.h" #include "print.h" +#include "xilinx.h" +#include "flatten.h" #define XILINXHASHSIZE 99 static long xilinxhashbase = 0xA00; @@ -132,10 +135,8 @@ char *xilinx_class(model) } return(model); } -void -Xilinx(cellname, filename) - char *cellname; - char *filename; + +void Xilinx(char *cellname, char *filename) { char Path[500]; char FileName[500]; @@ -163,8 +164,7 @@ Xilinx(cellname, filename) CloseFile(FileName); } -xilinxCell(cell) - char *cell; +int xilinxCell(char *cell) { struct nlist *nl; struct objlist *ob; @@ -252,9 +252,7 @@ struct objlist *xilinx_gate(ob,nl) return(nob); } -xilinx_sym(nl,gob) - struct nlist *nl; - struct objlist *gob; +void xilinx_sym(struct nlist *nl, struct objlist *gob) { struct objlist *ob; char *cp,*rindex(); diff --git a/base/xilinx.h b/base/xilinx.h new file mode 100644 index 0000000..bb6b7c6 --- /dev/null +++ b/base/xilinx.h @@ -0,0 +1,10 @@ +#ifndef _XILINX_H +#define _XILINX_H + +void xilinx_sym(struct nlist *nl, struct objlist *gob); +void Xilinx(char *cellname, char *filename); +int xilinxCell(char *cell); +int XilinxLibPresent(void); +void XilinxLib(void); + +#endif /* _XILINX_H */ \ No newline at end of file diff --git a/tcltk/Makefile b/tcltk/Makefile index e74b1b5..c637eee 100644 --- a/tcltk/Makefile +++ b/tcltk/Makefile @@ -9,7 +9,7 @@ EXTRA_LIBS = ${MAIN_EXTRA_LIBS} DFLAGS += -DNETGEN_DATE="\"`date`\"" LIBS += -lm CLEANS += netgen.sh netgen.tcl netgenexec${EXEEXT} -CFLAGS += -I${NETGENDIR}/base +CFLAGS += -I${NETGENDIR}/base -I./base TCL_FILES = \ $(DESTDIR)${INSTALL_TCLDIR}/tkcon.tcl \ diff --git a/tcltk/tclnetgen.c b/tcltk/tclnetgen.c index f933bb8..c59e16c 100644 --- a/tcltk/tclnetgen.c +++ b/tcltk/tclnetgen.c @@ -32,6 +32,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "print.h" #include "query.h" /* for ElementNodes() */ #include "hash.h" +#include "xilinx.h" +#include "tech.h" #ifndef TRUE #define TRUE 1 @@ -976,7 +978,7 @@ _netgen_writenet(ClientData clientData, SpiceCell(repstr, filenum, ""); break; case VERILOG_IDX: - VerilogModule(repstr, filenum, ""); + VerilogTop(repstr, filenum, ""); break; case WOMBAT_IDX: Wombat(repstr,NULL); From 5def9e0ffc1b76f2568f44b9497246f46ae235f8 Mon Sep 17 00:00:00 2001 From: Kamyar Mohajerani Date: Tue, 16 Nov 2021 22:18:59 -0500 Subject: [PATCH 2/4] remove --- base/ext.c | 1 - 1 file changed, 1 deletion(-) diff --git a/base/ext.c b/base/ext.c index 8f27d7d..f47c032 100644 --- a/base/ext.c +++ b/base/ext.c @@ -24,7 +24,6 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include /* for strtod() */ #include #include -#include #include "netgen.h" #include "objlist.h" From 879711def32901892c1423c1166b22e9055b8c08 Mon Sep 17 00:00:00 2001 From: Kamyar Mohajerani Date: Wed, 17 Nov 2021 11:53:04 -0500 Subject: [PATCH 3/4] revert removal of superfluous 'extern' .. for functions based on review comments --- base/flatten.h | 5 +-- base/hash.h | 40 +++++++++++----------- base/netcmp.h | 86 +++++++++++++++++++++++------------------------ base/netgen.h | 2 -- base/objlist.c | 2 +- base/objlist.h | 18 +++++----- base/tech.h | 8 ++--- base/xilinx.h | 12 +++---- tcltk/Makefile | 2 +- tcltk/tclnetgen.c | 1 + 10 files changed, 88 insertions(+), 88 deletions(-) diff --git a/base/flatten.h b/base/flatten.h index 605ab1b..d259998 100644 --- a/base/flatten.h +++ b/base/flatten.h @@ -1,6 +1,7 @@ #ifndef _FLATTEN_H #define _FLATTEN_H -void flattenCell(char *name, int file); +extern int UniquePins(char *name, int filenum); +extern void flattenCell(char *name, int file); -#endif /* _FLATTEN_H */ \ No newline at end of file +#endif /* _FLATTEN_H */ diff --git a/base/hash.h b/base/hash.h index be5a30d..087e90e 100644 --- a/base/hash.h +++ b/base/hash.h @@ -15,40 +15,40 @@ struct hashdict { }; -void InitializeHashTable(struct hashdict *dict, int size); -int RecurseHashTable(struct hashdict *dict, +extern void InitializeHashTable(struct hashdict *dict, int size); +extern int RecurseHashTable(struct hashdict *dict, int (*func)(struct hashlist *elem)); -int RecurseHashTableValue(struct hashdict *dict, +extern int RecurseHashTableValue(struct hashdict *dict, int (*func)(struct hashlist *elem, int), int); -struct nlist *RecurseHashTablePointer(struct hashdict *dict, +extern struct nlist *RecurseHashTablePointer(struct hashdict *dict, struct nlist *(*func)(struct hashlist *elem, void *), void *pointer); -void HashDelete(char *name, struct hashdict *dict); -void HashIntDelete(char *name, int value, struct hashdict *dict); -void HashKill(struct hashdict *dict); +extern void HashDelete(char *name, struct hashdict *dict); +extern void HashIntDelete(char *name, int value, struct hashdict *dict); +extern void HashKill(struct hashdict *dict); -int CountHashTableEntries(struct hashlist *p); -int CountHashTableBinsUsed(struct hashlist *p); +extern int CountHashTableEntries(struct hashlist *p); +extern int CountHashTableBinsUsed(struct hashlist *p); /* these functions return a pointer to a hash list element */ -struct hashlist *HashInstall(char *name, struct hashdict *dict); -struct hashlist *HashPtrInstall(char *name, void *ptr, +extern struct hashlist *HashInstall(char *name, struct hashdict *dict); +extern struct hashlist *HashPtrInstall(char *name, void *ptr, struct hashdict *dict); -struct hashlist *HashIntPtrInstall(char *name, int value, void *ptr, +extern struct hashlist *HashIntPtrInstall(char *name, int value, void *ptr, struct hashdict *dict); -struct hashlist *HashInt2PtrInstall(char *name, int c, void *ptr, +extern struct hashlist *HashInt2PtrInstall(char *name, int c, void *ptr, struct hashdict *dict); /* these functions return the ->ptr field of a struct hashlist */ -void *HashLookup(char *s, struct hashdict *dict); -void *HashIntLookup(char *s, int i, struct hashdict *dict); -void *HashInt2Lookup(char *s, int c, struct hashdict *dict); -void *HashFirst(struct hashdict *dict); -void *HashNext(struct hashdict *dict); +extern void *HashLookup(char *s, struct hashdict *dict); +extern void *HashIntLookup(char *s, int i, struct hashdict *dict); +extern void *HashInt2Lookup(char *s, int c, struct hashdict *dict); +extern void *HashFirst(struct hashdict *dict); +extern void *HashNext(struct hashdict *dict); -unsigned long hashnocase(char *s, int hashsize); -unsigned long my_hash(char *s, int hashsize); +extern unsigned long hashnocase(char *s, int hashsize); +extern unsigned long my_hash(char *s, int hashsize); extern int (*matchfunc)(char *, char *); /* matchintfunc() compares based on the name and the first */ diff --git a/base/netcmp.h b/base/netcmp.h index 62d8da0..da7a722 100644 --- a/base/netcmp.h +++ b/base/netcmp.h @@ -18,59 +18,59 @@ extern int InterruptPending; /* Exported procedures */ -void PrintElementClasses(struct ElementClass *EC, int type, int dolist); -void PrintNodeClasses(struct NodeClass *NC, int type, int dolist); -void SummarizeNodeClasses(struct NodeClass *NC); -void PrintPropertyResults(int do_list); -void PrintCoreStats(void); -void ResetState(void); -void CreateTwoLists(char *name1, int file1, char *name2, int file2, +extern void PrintElementClasses(struct ElementClass *EC, int type, int dolist); +extern void PrintNodeClasses(struct NodeClass *NC, int type, int dolist); +extern void SummarizeNodeClasses(struct NodeClass *NC); +extern void PrintPropertyResults(int do_list); +extern void PrintCoreStats(void); +extern void ResetState(void); +extern void CreateTwoLists(char *name1, int file1, char *name2, int file2, int dolist); -int Iterate(void); -int VerifyMatching(void); -void PrintAutomorphisms(void); -int ResolveAutomorphisms(void); -void PermuteAutomorphisms(void); -int Permute(void); -int PermuteSetup(char *model, int filenum, char *pin1, char *pin2); -int PermuteForget(char *model, int filenum, char *pin1, char *pin2); -int EquivalenceElements(char *name1, int file1, char *name2, int file2); -int EquivalenceNodes(char *name1, int file1, char *name2, int file2); -int EquivalenceClasses(char *name1, int file1, char *name2, int file2); -int IgnoreClass(char *name, int file, unsigned char type); -int MatchPins(struct nlist *tp1, struct nlist *tp2, int dolist); -int PropertyOptimize(struct objlist *ob, struct nlist *tp, int run, +extern int Iterate(void); +extern int VerifyMatching(void); +extern void PrintAutomorphisms(void); +extern int ResolveAutomorphisms(void); +extern void PermuteAutomorphisms(void); +extern int Permute(void); +extern int PermuteSetup(char *model, int filenum, char *pin1, char *pin2); +extern int PermuteForget(char *model, int filenum, char *pin1, char *pin2); +extern int EquivalenceElements(char *name1, int file1, char *name2, int file2); +extern int EquivalenceNodes(char *name1, int file1, char *name2, int file2); +extern int EquivalenceClasses(char *name1, int file1, char *name2, int file2); +extern int IgnoreClass(char *name, int file, unsigned char type); +extern int MatchPins(struct nlist *tp1, struct nlist *tp2, int dolist); +extern int PropertyOptimize(struct objlist *ob, struct nlist *tp, int run, int series, int comb); -int CreateCompareQueue(char *, int, char *, int); -int GetCompareQueueTop(char **, int *, char **, int *); -int PeekCompareQueueTop(char **, int *, char **, int *); -void RemoveCompareQueue(); +extern int CreateCompareQueue(char *, int, char *, int); +extern int GetCompareQueueTop(char **, int *, char **, int *); +extern int PeekCompareQueueTop(char **, int *, char **, int *); +extern void RemoveCompareQueue(); -void PrintIllegalClasses(); -void PrintIllegalNodeClasses(); -void PrintIllegalElementClasses(); +extern void PrintIllegalClasses(); +extern void PrintIllegalNodeClasses(); +extern void PrintIllegalElementClasses(); -void DumpNetwork(struct objlist *ob, int cidx); -void DumpNetworkAll(char *name, int file); +extern void DumpNetwork(struct objlist *ob, int cidx); +extern void DumpNetworkAll(char *name, int file); -void RegroupDataStructures(); -void FormatIllegalElementClasses(); -void FormatIllegalNodeClasses(); -int ResolveAutomorphsByProperty(); -int ResolveAutomorphsByPin(); -void SummarizeElementClasses(struct ElementClass *EC); -int remove_group_tags(struct objlist *ob); +extern void RegroupDataStructures(); +extern void FormatIllegalElementClasses(); +extern void FormatIllegalNodeClasses(); +extern int ResolveAutomorphsByProperty(); +extern int ResolveAutomorphsByPin(); +extern void SummarizeElementClasses(struct ElementClass *EC); +extern int remove_group_tags(struct objlist *ob); #ifdef TCL_NETGEN -int EquivalentNode(); -int EquivalentElement(); +extern int EquivalentNode(); +extern int EquivalentElement(); -void enable_interrupt(); -void disable_interrupt(); +extern void enable_interrupt(); +extern void disable_interrupt(); -Tcl_Obj *ListNodeClasses(int legal); -Tcl_Obj *ListElementClasses(int legal); +extern Tcl_Obj *ListNodeClasses(int legal); +extern Tcl_Obj *ListElementClasses(int legal); #endif diff --git a/base/netgen.h b/base/netgen.h index 982fc9b..b60893c 100644 --- a/base/netgen.h +++ b/base/netgen.h @@ -18,8 +18,6 @@ #define HORIZONTAL 1 #define VERTICAL 2 -int UniquePins(char *name, int filenum); - /* netgen.c */ extern void ReopenCellDef(char *name, int file); extern void CellDef(char *name, int file); diff --git a/base/objlist.c b/base/objlist.c index 2cdbb86..23a59dd 100644 --- a/base/objlist.c +++ b/base/objlist.c @@ -179,7 +179,7 @@ char *strsave(char *s) int match(char *st1, char *st2) { - if (0==strncmp(st1,st2,PATH_MAX)) return(1); + if (0==strcmp(st1,st2)) return(1); else return(0); } diff --git a/base/objlist.h b/base/objlist.h index b3d9f4c..6845a29 100644 --- a/base/objlist.h +++ b/base/objlist.h @@ -312,18 +312,18 @@ extern void GarbageCollect(void); extern void InitGarbageCollection(void); extern void AddToGarbageList(struct objlist *head); -void DeleteProperties(struct keyvalue **topptr); -void AddProperty(struct keyvalue **topptr, char *key, char *value); -void AddScaledProperty(struct keyvalue **topptr, char *key, char *value, double scale); -void DeleteProperties(struct keyvalue **topptr); -struct objlist *LinkProperties(char *model, struct keyvalue *topptr); +extern void DeleteProperties(struct keyvalue **topptr); +extern void AddProperty(struct keyvalue **topptr, char *key, char *value); +extern void AddScaledProperty(struct keyvalue **topptr, char *key, char *value, double scale); +extern void DeleteProperties(struct keyvalue **topptr); +extern struct objlist *LinkProperties(char *model, struct keyvalue *topptr); -void ClassDelete(char *class, int file); -void RemoveShorted(char *class, int file); -void CellRehash(char *name, char *newname, int file); +extern void ClassDelete(char *class, int file); +extern void RemoveShorted(char *class, int file); +extern void CellRehash(char *name, char *newname, int file); /* defined in netgen.c */ -int ConvertStringToInteger(char *string, int *ival); +extern int ConvertStringToInteger(char *string, int *ival); #ifdef HAVE_MALLINFO void PrintMemoryStats(void); diff --git a/base/tech.h b/base/tech.h index 82d31c4..c1aa8e3 100644 --- a/base/tech.h +++ b/base/tech.h @@ -1,8 +1,8 @@ #ifndef _TECH_H #define _TECH_H -int ActelLibPresent(void); -void ActelLib(void); -void VerilogTop(char *name, int fnum, char *filename); +extern int ActelLibPresent(void); +extern void ActelLib(void); +extern void VerilogTop(char *name, int fnum, char *filename); -#endif /* _TECH_H */ \ No newline at end of file +#endif /* _TECH_H */ diff --git a/base/xilinx.h b/base/xilinx.h index bb6b7c6..6f9f55c 100644 --- a/base/xilinx.h +++ b/base/xilinx.h @@ -1,10 +1,10 @@ #ifndef _XILINX_H #define _XILINX_H -void xilinx_sym(struct nlist *nl, struct objlist *gob); -void Xilinx(char *cellname, char *filename); -int xilinxCell(char *cell); -int XilinxLibPresent(void); -void XilinxLib(void); +extern void xilinx_sym(struct nlist *nl, struct objlist *gob); +extern void Xilinx(char *cellname, char *filename); +extern int xilinxCell(char *cell); +extern int XilinxLibPresent(void); +extern void XilinxLib(void); -#endif /* _XILINX_H */ \ No newline at end of file +#endif /* _XILINX_H */ diff --git a/tcltk/Makefile b/tcltk/Makefile index c637eee..e74b1b5 100644 --- a/tcltk/Makefile +++ b/tcltk/Makefile @@ -9,7 +9,7 @@ EXTRA_LIBS = ${MAIN_EXTRA_LIBS} DFLAGS += -DNETGEN_DATE="\"`date`\"" LIBS += -lm CLEANS += netgen.sh netgen.tcl netgenexec${EXEEXT} -CFLAGS += -I${NETGENDIR}/base -I./base +CFLAGS += -I${NETGENDIR}/base TCL_FILES = \ $(DESTDIR)${INSTALL_TCLDIR}/tkcon.tcl \ diff --git a/tcltk/tclnetgen.c b/tcltk/tclnetgen.c index c59e16c..aa6c438 100644 --- a/tcltk/tclnetgen.c +++ b/tcltk/tclnetgen.c @@ -34,6 +34,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "hash.h" #include "xilinx.h" #include "tech.h" +#include "flatten.h" #ifndef TRUE #define TRUE 1 From cfdc60104b8487be153541697df476ca84598e4a Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Wed, 17 Nov 2021 12:05:01 -0500 Subject: [PATCH 4/4] Updated version to go along with the merge of pull request #39 from Kamyar Mohajerani, with a few minor edits such as renaming my_hash to hashcase, as a better counterpoint to "hashnocase". --- VERSION | 2 +- base/ext.c | 4 ++-- base/hash.c | 2 +- base/hash.h | 2 +- base/netcmp.c | 4 ++-- base/objlist.c | 2 +- base/verilog.c | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/VERSION b/VERSION index 2593151..bca61d4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.209 +1.5.210 diff --git a/base/ext.c b/base/ext.c index f47c032..1774512 100644 --- a/base/ext.c +++ b/base/ext.c @@ -187,7 +187,7 @@ char *ReadExt(char *fname, int doflat, int *fnum) /* Make sure all .ext file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = my_hash; + hashfunc = hashcase; if (LookupCellFile(fname, filenum) != NULL) { Printf("Error: Duplicate cell name \"%s\"!\n", fname); @@ -653,7 +653,7 @@ char *ReadSim(char *fname, int *fnum) /* Make sure all .sim file reading is case sensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = my_hash; + hashfunc = hashcase; CellDef(fname, filenum); diff --git a/base/hash.c b/base/hash.c index 40a2a84..31c8245 100644 --- a/base/hash.c +++ b/base/hash.c @@ -148,7 +148,7 @@ unsigned long hashnocase(char *s, int hashsize) return (hashsize == 0) ? hashval : (hashval % hashsize); } -unsigned long my_hash(char *s, int hashsize) +unsigned long hashcase(char *s, int hashsize) { unsigned long hashval; diff --git a/base/hash.h b/base/hash.h index 087e90e..4007a3e 100644 --- a/base/hash.h +++ b/base/hash.h @@ -48,7 +48,7 @@ extern void *HashFirst(struct hashdict *dict); extern void *HashNext(struct hashdict *dict); extern unsigned long hashnocase(char *s, int hashsize); -extern unsigned long my_hash(char *s, int hashsize); +extern unsigned long hashcase(char *s, int hashsize); extern int (*matchfunc)(char *, char *); /* matchintfunc() compares based on the name and the first */ diff --git a/base/netcmp.c b/base/netcmp.c index 4430e51..9161dbb 100644 --- a/base/netcmp.c +++ b/base/netcmp.c @@ -37,7 +37,6 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef TCL_NETGEN #include -int check_interrupt(); #endif #include "netgen.h" @@ -54,6 +53,7 @@ int check_interrupt(); int InterruptPending = 0; void (*oldinthandler)() = SIG_DFL; extern Tcl_Interp *netgeninterp; +extern int check_interrupt(); #endif /* define the following to debug core allocation */ @@ -3761,7 +3761,7 @@ void CreateTwoLists(char *name1, int file1, char *name2, int file2, int dolist) /* determine if matching will be case sensitive or case insensitive */ matchfunc = match; matchintfunc = matchfile; - hashfunc = my_hash; + hashfunc = hashcase; if (tc1 != NULL && tc2 != NULL) { if ((tc1->flags & CELL_NOCASE) && (tc2->flags & CELL_NOCASE)) { matchfunc = matchnocase; diff --git a/base/objlist.c b/base/objlist.c index 23a59dd..9b2236b 100644 --- a/base/objlist.c +++ b/base/objlist.c @@ -289,7 +289,7 @@ static struct hashdict cell_dict; void InitCellHashTable(void) { - hashfunc = my_hash; + hashfunc = hashcase; matchfunc = NULL; matchintfunc = matchfile; InitializeHashTable(&cell_dict, CELLHASHSIZE); diff --git a/base/verilog.c b/base/verilog.c index 5b92a90..b8d8b11 100644 --- a/base/verilog.c +++ b/base/verilog.c @@ -2239,7 +2239,7 @@ char *ReadVerilogTop(char *fname, int *fnum, int blackbox) else { matchfunc = match; matchintfunc = matchfile; - hashfunc = my_hash; + hashfunc = hashcase; } InitializeHashTable(&verilogparams, OBJHASHSIZE);