diff --git a/cad/graywolf/Makefile b/cad/graywolf/Makefile index 92c6ceb5095..0c314abc5b9 100644 --- a/cad/graywolf/Makefile +++ b/cad/graywolf/Makefile @@ -1,11 +1,11 @@ -# $OpenBSD: Makefile,v 1.3 2020/04/12 14:46:04 sthen Exp $ +# $OpenBSD: Makefile,v 1.4 2021/02/20 19:12:04 naddy Exp $ COMMENT = placement tool used in VLSI design GH_ACCOUNT = rubund GH_PROJECT = graywolf GH_TAGNAME = 0.1.6 -REVISION = 0 +REVISION = 1 SHARED_LIBS += ycadgraywolf 0.0 # 0.0 diff --git a/cad/graywolf/patches/patch-src_mc_compact_readcgraph_c b/cad/graywolf/patches/patch-src_mc_compact_readcgraph_c new file mode 100644 index 00000000000..ee1e325f0a2 --- /dev/null +++ b/cad/graywolf/patches/patch-src_mc_compact_readcgraph_c @@ -0,0 +1,169 @@ +$OpenBSD: patch-src_mc_compact_readcgraph_c,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/mc_compact/readcgraph.c +--- src/mc_compact/readcgraph.c.orig ++++ src/mc_compact/readcgraph.c +@@ -242,12 +242,12 @@ int yydebug; + int yynerrs; + int yyerrflag; + int yychar; +-short *yyssp; +-YYSTYPE *yyvsp; ++short *yyssp2; ++YYSTYPE *yyvsp2; + YYSTYPE yyval; + YYSTYPE yylval; +-short yyss[YYSTACKSIZE]; +-YYSTYPE yyvs[YYSTACKSIZE]; ++short yyss2[YYSTACKSIZE]; ++YYSTYPE yyvs2[YYSTACKSIZE]; + #define yystacksize YYSTACKSIZE + + #include "readcgraph_l.h" +@@ -313,9 +313,9 @@ yyparse() + yyerrflag = 0; + yychar = (-1); + +- yyssp = yyss; +- yyvsp = yyvs; +- *yyssp = yystate = 0; ++ yyssp2 = yyss2; ++ yyvsp2 = yyvs2; ++ *yyssp2 = yystate = 0; + + yyloop: + if (yyn = yydefred[yystate]) goto yyreduce; +@@ -341,12 +341,12 @@ yyloop: + printf("yydebug: state %d, shifting to state %d\n", + yystate, yytable[yyn]); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate = yytable[yyn]; +- *++yyvsp = yylval; ++ *++yyssp2 = yystate = yytable[yyn]; ++ *++yyvsp2 = yylval; + yychar = (-1); + if (yyerrflag > 0) --yyerrflag; + goto yyloop; +@@ -416,20 +416,20 @@ yyinrecovery: + yyerrflag = 3; + for (;;) + { +- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && ++ if ((yyn = yysindex[*yyssp2]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { + #if YYDEBUG + if (yydebug) + printf("yydebug: state %d, error recovery shifting\ +- to state %d\n", *yyssp, yytable[yyn]); ++ to state %d\n", *yyssp2, yytable[yyn]); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate = yytable[yyn]; +- *++yyvsp = yylval; ++ *++yyssp2 = yystate = yytable[yyn]; ++ *++yyvsp2 = yylval; + goto yyloop; + } + else +@@ -437,11 +437,11 @@ yyinrecovery: + #if YYDEBUG + if (yydebug) + printf("yydebug: error recovery discarding state %d\n", +- *yyssp); ++ *yyssp2); + #endif +- if (yyssp <= yyss) goto yyabort; +- --yyssp; +- --yyvsp; ++ if (yyssp2 <= yyss2) goto yyabort; ++ --yyssp2; ++ --yyvsp2; + } + } + } +@@ -468,33 +468,33 @@ yyreduce: + yystate, yyn, yyrule[yyn]); + #endif + yym = yylen[yyn]; +- yyval = yyvsp[1-yym]; ++ yyval = yyvsp2[1-yym]; + switch (yyn) + { + case 2: + { +- init_graph( yyvsp[-3].ival, yyvsp[0].ival ) ; ++ init_graph( yyvsp2[-3].ival, yyvsp2[0].ival ) ; + } + break; + case 6: + { + /* node:1 x:2 y:4 l:0 r:9 b:0 t:8 */ + /* node number, center and size */ +- nodeS = yyvsp[-18].ival ; +- addNode( yyvsp[-18].ival, yyvsp[-15].ival, yyvsp[-12].ival ) ; ++ nodeS = yyvsp2[-18].ival ; ++ addNode( yyvsp2[-18].ival, yyvsp2[-15].ival, yyvsp2[-12].ival ) ; + } + break; + case 9: + { + /* ex. adj node:2 len:32 cap:14 l:-89 r:-63 b:0 t:6 HnotV:1 lb:0 rt:0 */ +- addEdge( nodeS, yyvsp[-27].ival, /* nodeS, node */ +- yyvsp[-6].ival, yyvsp[-3].ival, yyvsp[0].ival ) ;/* HnotV, lbcell, rtcelll */ ++ addEdge( nodeS, yyvsp2[-27].ival, /* nodeS, node */ ++ yyvsp2[-6].ival, yyvsp2[-3].ival, yyvsp2[0].ival ) ;/* HnotV, lbcell, rtcelll */ + } + break; + } +- yyssp -= yym; +- yystate = *yyssp; +- yyvsp -= yym; ++ yyssp2 -= yym; ++ yystate = *yyssp2; ++ yyvsp2 -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +@@ -504,8 +504,8 @@ break; + state %d\n", YYFINAL); + #endif + yystate = YYFINAL; +- *++yyssp = YYFINAL; +- *++yyvsp = yyval; ++ *++yyssp2 = YYFINAL; ++ *++yyvsp2 = yyval; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +@@ -531,14 +531,14 @@ break; + #if YYDEBUG + if (yydebug) + printf("yydebug: after reduction, shifting from state %d \ +-to state %d\n", *yyssp, yystate); ++to state %d\n", *yyssp2, yystate); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate; +- *++yyvsp = yyval; ++ *++yyssp2 = yystate; ++ *++yyvsp2 = yyval; + goto yyloop; + yyoverflow: + yyerror("yacc stack overflow"); diff --git a/cad/graywolf/patches/patch-src_twmc_readcells_c b/cad/graywolf/patches/patch-src_twmc_readcells_c new file mode 100644 index 00000000000..769b7c18467 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twmc_readcells_c @@ -0,0 +1,512 @@ +$OpenBSD: patch-src_twmc_readcells_c,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twmc/readcells.c +--- src/twmc/readcells.c.orig ++++ src/twmc/readcells.c +@@ -741,12 +741,12 @@ int yydebug; + int yynerrs; + int yyerrflag; + int yychar; +-short *yyssp; +-YYSTYPE *yyvsp; ++short *yyssp2; ++YYSTYPE *yyvsp2; + YYSTYPE yyval; + YYSTYPE yylval; +-short yyss[YYSTACKSIZE]; +-YYSTYPE yyvs[YYSTACKSIZE]; ++short yyss2[YYSTACKSIZE]; ++YYSTYPE yyvs2[YYSTACKSIZE]; + #define yystacksize YYSTACKSIZE + + #include "readcells_l.h" +@@ -810,9 +810,9 @@ yyparse() + yyerrflag = 0; + yychar = (-1); + +- yyssp = yyss; +- yyvsp = yyvs; +- *yyssp = yystate = 0; ++ yyssp2 = yyss2; ++ yyvsp2 = yyvs2; ++ *yyssp2 = yystate = 0; + + yyloop: + if (yyn = yydefred[yystate]) goto yyreduce; +@@ -838,12 +838,12 @@ yyloop: + printf("yydebug: state %d, shifting to state %d\n", + yystate, yytable[yyn]); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate = yytable[yyn]; +- *++yyvsp = yylval; ++ *++yyssp2 = yystate = yytable[yyn]; ++ *++yyvsp2 = yylval; + yychar = (-1); + if (yyerrflag > 0) --yyerrflag; + goto yyloop; +@@ -963,20 +963,20 @@ yyinrecovery: + yyerrflag = 3; + for (;;) + { +- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && ++ if ((yyn = yysindex[*yyssp2]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { + #if YYDEBUG + if (yydebug) + printf("yydebug: state %d, error recovery shifting\ +- to state %d\n", *yyssp, yytable[yyn]); ++ to state %d\n", *yyssp2, yytable[yyn]); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate = yytable[yyn]; +- *++yyvsp = yylval; ++ *++yyssp2 = yystate = yytable[yyn]; ++ *++yyvsp2 = yylval; + goto yyloop; + } + else +@@ -984,11 +984,11 @@ yyinrecovery: + #if YYDEBUG + if (yydebug) + printf("yydebug: error recovery discarding state %d\n", +- *yyssp); ++ *yyssp2); + #endif +- if (yyssp <= yyss) goto yyabort; +- --yyssp; +- --yyvsp; ++ if (yyssp2 <= yyss2) goto yyabort; ++ --yyssp2; ++ --yyvsp2; + } + } + } +@@ -1015,7 +1015,7 @@ yyreduce: + yystate, yyn, yyrule[yyn]); + #endif + yym = yylen[yyn]; +- yyval = yyvsp[1-yym]; ++ yyval = yyvsp2[1-yym]; + switch (yyn) + { + case 7: +@@ -1077,7 +1077,7 @@ break; + case 30: + { + endCell() ; +- add_instance( yyvsp[0].string ) ; ++ add_instance( yyvsp2[0].string ) ; + } + break; + case 32: +@@ -1090,25 +1090,25 @@ case 32: + break; + case 36: + { +- addCell( yyvsp[0].string, CUSTOMCELLTYPE ) ; ++ addCell( yyvsp2[0].string, CUSTOMCELLTYPE ) ; + } + break; + case 38: + { +- addCell( yyvsp[0].string, SOFTCELLTYPE ) ; ++ addCell( yyvsp2[0].string, SOFTCELLTYPE ) ; + } + break; + case 39: + { +- addCell( yyvsp[0].string, STDCELLTYPE ) ; ++ addCell( yyvsp2[0].string, STDCELLTYPE ) ; + } + break; + case 41: + { + /* group neighborhood is free to move */ + /* we use fixCell to build group box */ +- fixCell( GROUPFLAG, yyvsp[-11].ival, yyvsp[-9].string, yyvsp[-8].ival, yyvsp[-6].string, +- yyvsp[-5].ival, yyvsp[-3].string, yyvsp[-2].ival, yyvsp[0].string ) ; ++ fixCell( GROUPFLAG, yyvsp2[-11].ival, yyvsp2[-9].string, yyvsp2[-8].ival, yyvsp2[-6].string, ++ yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string ) ; + addClass( --unique_classG ) ; + } + break; +@@ -1116,8 +1116,8 @@ case 42: + { + /* group neighborhood is fixed */ + /* we use fixCell to build group box */ +- fixCell( FIXEDGROUPFLAG, yyvsp[-11].ival, yyvsp[-9].string, yyvsp[-8].ival, yyvsp[-6].string, +- yyvsp[-5].ival, yyvsp[-3].string, yyvsp[-2].ival, yyvsp[0].string ) ; ++ fixCell( FIXEDGROUPFLAG, yyvsp2[-11].ival, yyvsp2[-9].string, yyvsp2[-8].ival, yyvsp2[-6].string, ++ yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string ) ; + addClass( --unique_classG ) ; + + } +@@ -1125,7 +1125,7 @@ break; + case 43: + { + /* cell is fixed at a point */ +- fixCell( POINTFLAG, yyvsp[-5].ival, yyvsp[-3].string, yyvsp[-2].ival, yyvsp[0].string, ++ fixCell( POINTFLAG, yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string, + 0, "L", 0, "B" ) ; + addClass( --unique_classG ) ; + } +@@ -1133,93 +1133,93 @@ break; + case 44: + { + /* cell is fixed within a fixed neighborhood */ +- fixCell( NEIGHBORHOODFLAG, yyvsp[-11].ival, yyvsp[-9].string, yyvsp[-8].ival, yyvsp[-6].string, +- yyvsp[-5].ival, yyvsp[-3].string, yyvsp[-2].ival, yyvsp[0].string ) ; ++ fixCell( NEIGHBORHOODFLAG, yyvsp2[-11].ival, yyvsp2[-9].string, yyvsp2[-8].ival, yyvsp2[-6].string, ++ yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string ) ; + addClass( --unique_classG ) ; + } + break; + case 46: + { +- yyval.string = yyvsp[0].string ; ++ yyval.string = yyvsp2[0].string ; + } + break; + case 47: + { +- yyval.string = yyvsp[0].string ; ++ yyval.string = yyvsp2[0].string ; + } + break; + case 48: + { +- addCell( yyvsp[0].string, PADCELLTYPE ) ; ++ addCell( yyvsp2[0].string, PADCELLTYPE ) ; + } + break; + case 49: + { +- addCell( yyvsp[-1].string, PADGROUPTYPE ) ; ++ addCell( yyvsp2[-1].string, PADGROUPTYPE ) ; + setPermutation( TRUE ) ; + } + break; + case 50: + { +- addCell( yyvsp[-1].string, PADGROUPTYPE ) ; ++ addCell( yyvsp2[-1].string, PADGROUPTYPE ) ; + setPermutation( FALSE ) ; + } + break; + case 52: + { +- addCell( yyvsp[0].string, SUPERCELLTYPE ) ; ++ addCell( yyvsp2[0].string, SUPERCELLTYPE ) ; + /* initSuperGroup() ; */ + } + break; + case 54: + { +- addCell( yyvsp[0].string, GROUPCELLTYPE ) ; ++ addCell( yyvsp2[0].string, GROUPCELLTYPE ) ; + } + break; + case 56: + { +- processCorners( yyvsp[-1].ival ) ; ++ processCorners( yyvsp2[-1].ival ) ; + } + break; + case 57: + { +- yyval.ival = yyvsp[0].ival ; ++ yyval.ival = yyvsp2[0].ival ; + } + break; + case 58: + { +- addCorner( yyvsp[-1].ival, yyvsp[0].ival ) ; ++ addCorner( yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 59: + { +- addCorner( yyvsp[-1].ival, yyvsp[0].ival ) ; ++ addCorner( yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 60: + { +- addClass( yyvsp[0].ival ) ; ++ addClass( yyvsp2[0].ival ) ; + } + break; + case 65: + { + /* first in the list is the initial orientation */ +- initOrient( yyvsp[0].ival ) ; ++ initOrient( yyvsp2[0].ival ) ; + } + break; + case 66: + { +- addOrient( yyvsp[0].ival ) ; ++ addOrient( yyvsp2[0].ival ) ; + } + break; + case 68: + { +- set_cur_orient( yyvsp[0].ival ) ; ++ set_cur_orient( yyvsp2[0].ival ) ; + } + break; + case 69: + { +- addAspectBounds( yyvsp[-2].fval, yyvsp[0].fval ) ; ++ addAspectBounds( yyvsp2[-2].fval, yyvsp2[0].fval ) ; + } + break; + case 70: +@@ -1234,37 +1234,37 @@ case 79: + break; + case 80: + { +- addPin( yyvsp[-3].string, yyvsp[-1].string, yyvsp[0].ival, HARDPINTYPE ) ; ++ addPin( yyvsp2[-3].string, yyvsp2[-1].string, yyvsp2[0].ival, HARDPINTYPE ) ; + } + break; + case 81: + { +- set_pin_pos( yyvsp[-1].ival, yyvsp[0].ival ) ; ++ set_pin_pos( yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 83: + { +- add_analog( yyvsp[0].ival ) ; ++ add_analog( yyvsp2[0].ival ) ; + } + break; + case 84: + { +- add_pin_contour( yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_pin_contour( yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 85: + { +- add_pin_contour( yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_pin_contour( yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 87: + { +- add_current( yyvsp[0].fval ) ; ++ add_current( yyvsp2[0].fval ) ; + } + break; + case 89: + { +- add_power( yyvsp[0].fval ) ; ++ add_power( yyvsp2[0].fval ) ; + } + break; + case 91: +@@ -1274,7 +1274,7 @@ case 91: + break; + case 94: + { +- addPin( yyvsp[-4].string, yyvsp[-2].string, yyvsp[-1].ival, SOFTPINTYPE ) ; ++ addPin( yyvsp2[-4].string, yyvsp2[-2].string, yyvsp2[-1].ival, SOFTPINTYPE ) ; + set_restrict_type( SOFTPINTYPE ) ; + } + break; +@@ -1292,7 +1292,7 @@ case 99: + break; + case 103: + { +- addPin( yyvsp[-1].string, NULL, yyvsp[0].ival, SOFTEQUIVTYPE ) ; ++ addPin( yyvsp2[-1].string, NULL, yyvsp2[0].ival, SOFTEQUIVTYPE ) ; + } + break; + case 104: +@@ -1304,94 +1304,94 @@ break; + case 108: + { + set_restrict_type( PINGROUPTYPE ) ; +- start_pin_group( yyvsp[-1].string, TRUE ) ; ++ start_pin_group( yyvsp2[-1].string, TRUE ) ; + } + break; + case 109: + { + set_restrict_type( PINGROUPTYPE ) ; +- start_pin_group( yyvsp[-1].string, FALSE ) ; ++ start_pin_group( yyvsp2[-1].string, FALSE ) ; + } + break; + case 112: + { +- add2pingroup( yyvsp[-1].string, TRUE ) ; /* fixed */ ++ add2pingroup( yyvsp2[-1].string, TRUE ) ; /* fixed */ + } + break; + case 113: + { +- add2pingroup( yyvsp[-1].string, FALSE ) ; /* nonfixed */ ++ add2pingroup( yyvsp2[-1].string, FALSE ) ; /* nonfixed */ + } + break; + case 116: + { +- addEquivPin( yyvsp[-3].string, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival, HARDPINTYPE ) ; ++ addEquivPin( yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[-1].ival, yyvsp2[0].ival, HARDPINTYPE ) ; + } + break; + case 117: + { /* default any layer */ yyval.ival = 0 ; } + break; + case 118: +-{ yyval.ival = yyvsp[0].ival ; } ++{ yyval.ival = yyvsp2[0].ival ; } + break; + case 121: + { +- addSideRestriction( yyvsp[0].ival ) ; ++ addSideRestriction( yyvsp2[0].ival ) ; + } + break; + case 122: + { +- addSideRestriction( yyvsp[0].ival ) ; ++ addSideRestriction( yyvsp2[0].ival ) ; + } + break; + case 124: + { +- add_pinspace( yyvsp[0].fval, yyvsp[0].fval ) ; ++ add_pinspace( yyvsp2[0].fval, yyvsp2[0].fval ) ; + } + break; + case 125: + { +- add_pinspace( yyvsp[-1].fval, yyvsp[0].fval ) ; ++ add_pinspace( yyvsp2[-1].fval, yyvsp2[0].fval ) ; + } + break; + case 127: + { +- addSideSpace( yyvsp[0].fval, yyvsp[0].fval ) ; ++ addSideSpace( yyvsp2[0].fval, yyvsp2[0].fval ) ; + } + break; + case 128: + { +- addSideSpace( yyvsp[-1].fval, yyvsp[0].fval ) ; ++ addSideSpace( yyvsp2[-1].fval, yyvsp2[0].fval ) ; + } + break; + case 129: + { +- addPadSide( yyvsp[0].string ) ; ++ addPadSide( yyvsp2[0].string ) ; + } + break; + case 135: + { +- add2padgroup( yyvsp[-1].string, TRUE ) ; /* fixed */ ++ add2padgroup( yyvsp2[-1].string, TRUE ) ; /* fixed */ + } + break; + case 136: + { +- add2padgroup( yyvsp[-1].string, FALSE ) ; /* nonfixed */ ++ add2padgroup( yyvsp2[-1].string, FALSE ) ; /* nonfixed */ + } + break; + case 139: + { +- add_cell_to_group( yyvsp[0].string ) ; ++ add_cell_to_group( yyvsp2[0].string ) ; + } + break; + case 140: + { +- add_cell_to_group( yyvsp[0].string ) ; ++ add_cell_to_group( yyvsp2[0].string ) ; + } + break; + case 150: + { +- yyval.string = yyvsp[0].string ; ++ yyval.string = yyvsp2[0].string ; + } + break; + case 151: +@@ -1399,7 +1399,7 @@ case 151: + /* convert integer to string */ + /* this allows integers to be used as strings */ + /* a kluge but timberwolf's old parser supported it */ +- sprintf( bufferS,"%d", yyvsp[0].ival ) ; ++ sprintf( bufferS,"%d", yyvsp2[0].ival ) ; + /* now clone string */ + yyval.string = (char *) Ystrclone( bufferS ) ; + } +@@ -1409,15 +1409,15 @@ case 152: + /* convert float to string */ + /* this allows floats to be used as strings */ + /* a kluge but timberwolf's old parser supported it */ +- sprintf( bufferS,"%f", yyvsp[0].fval ) ; ++ sprintf( bufferS,"%f", yyvsp2[0].fval ) ; + /* now clone string */ + yyval.string = (char *) Ystrclone( bufferS ) ; + } + break; + } +- yyssp -= yym; +- yystate = *yyssp; +- yyvsp -= yym; ++ yyssp2 -= yym; ++ yystate = *yyssp2; ++ yyvsp2 -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +@@ -1427,8 +1427,8 @@ break; + state %d\n", YYFINAL); + #endif + yystate = YYFINAL; +- *++yyssp = YYFINAL; +- *++yyvsp = yyval; ++ *++yyssp2 = YYFINAL; ++ *++yyvsp2 = yyval; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +@@ -1454,14 +1454,14 @@ break; + #if YYDEBUG + if (yydebug) + printf("yydebug: after reduction, shifting from state %d \ +-to state %d\n", *yyssp, yystate); ++to state %d\n", *yyssp2, yystate); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate; +- *++yyvsp = yyval; ++ *++yyssp2 = yystate; ++ *++yyvsp2 = yyval; + goto yyloop; + yyoverflow: + yyerror("yacc stack overflow"); diff --git a/cad/graywolf/patches/patch-src_twsc_config_h b/cad/graywolf/patches/patch-src_twsc_config_h new file mode 100644 index 00000000000..4a18122117e --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_config_h @@ -0,0 +1,17 @@ +$OpenBSD: patch-src_twsc_config_h,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/config.h +--- src/twsc/config.h.orig ++++ src/twsc/config.h +@@ -34,7 +34,7 @@ EXTERN ROWBOX *rowArrayG ; + + EXTERN INT max_blklengthG ; + EXTERN INT route2actG; /* added for placement adjusted for routing */ +-EXTERN INT track_pitchG; /* used only if global routing is performed */ ++extern INT track_pitchG; /* used only if global routing is performed */ + EXTERN INT gridCellG; /* used only if global routing is performed */ + EXTERN INT desiredLG ; + EXTERN DOUBLE *macspaceG ; diff --git a/cad/graywolf/patches/patch-src_twsc_feeds_h b/cad/graywolf/patches/patch-src_twsc_feeds_h new file mode 100644 index 00000000000..5a4923b25f0 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_feeds_h @@ -0,0 +1,17 @@ +$OpenBSD: patch-src_twsc_feeds_h,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/feeds.h +--- src/twsc/feeds.h.orig ++++ src/twsc/feeds.h +@@ -24,7 +24,7 @@ typedef struct feed_assgn_box { + FEED_SEG ; + + EXTERN INT *feeds_in_rowG ; +-EXTERN INT *FeedInRowG ; ++extern INT *FeedInRowG ; + EXTERN INT fdWidthG ; + EXTERN INT *fdcel_addedG ; + EXTERN INT **fdcel_needG ; diff --git a/cad/graywolf/patches/patch-src_twsc_groute_h b/cad/graywolf/patches/patch-src_twsc_groute_h new file mode 100644 index 00000000000..b14d949d0e3 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_groute_h @@ -0,0 +1,35 @@ +$OpenBSD: patch-src_twsc_groute_h,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/groute.h +--- src/twsc/groute.h.orig ++++ src/twsc/groute.h +@@ -112,7 +112,7 @@ EXTERN SEGBOXPTR *netsegHeadG ; + EXTERN SEGBOXPTR *netsegTailG ; + EXTERN DOUBLE mean_widthG ; + EXTERN INT **pairArrayG ; +-EXTERN INT numnetsG ; ++extern INT numnetsG ; + EXTERN INT numSegsG ; + EXTERN INT numSwSegsG ; + EXTERN INT tracksG ; +@@ -124,12 +124,13 @@ EXTERN INT gxstopG ; + EXTERN INT blkleftG , blkriteG ; + EXTERN INT gtopChanG , gbotChanG ; + EXTERN INT uneven_cell_heightG ; +-EXTERN INT ffeedsG , track_pitchG ; ++extern INT ffeedsG ; ++extern INT track_pitchG ; + +-EXTERN INT fdthrusG ; ++extern INT fdthrusG ; + EXTERN INT chan_node_noG ; +-EXTERN INT enough_built_in_feedG ; +-EXTERN INT *FeedInRowG ; ++extern INT enough_built_in_feedG ; ++extern INT *FeedInRowG ; + EXTERN INT blk_most_leftG ; + EXTERN INT blk_most_riteG ; + EXTERN INT *row_rite_classG ; diff --git a/cad/graywolf/patches/patch-src_twsc_main_c b/cad/graywolf/patches/patch-src_twsc_main_c new file mode 100644 index 00000000000..ee9add9e404 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_main_c @@ -0,0 +1,22 @@ +$OpenBSD: patch-src_twsc_main_c,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/main.c +--- src/twsc/main.c.orig ++++ src/twsc/main.c +@@ -128,6 +128,13 @@ extern INT spacer_widthG ; + extern INT longest_row_lengthG ; + extern INT largest_delta_row_lenG ; + extern INT total_row_lengthG ; ++INT numnetsG; ++INT *FeedInRowG; ++INT fdthrusG; ++INT track_pitchG; ++INT ffeedsG; ++ ++INT maxCellOG ; + + extern void readnets(FILE* fp); + diff --git a/cad/graywolf/patches/patch-src_twsc_main_h b/cad/graywolf/patches/patch-src_twsc_main_h new file mode 100644 index 00000000000..fc654c405e6 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_main_h @@ -0,0 +1,31 @@ +$OpenBSD: patch-src_twsc_main_h,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/main.h +--- src/twsc/main.h.orig ++++ src/twsc/main.h +@@ -21,12 +21,11 @@ EXTERN char *cktNameG ; + + EXTERN INT rowsG ; + EXTERN INT attmaxG ; +-EXTERN INT maxCellOG ; + EXTERN INT iterationG ; + + EXTERN INT blkxspanG ; + EXTERN INT blkyspanG ; +-EXTERN INT ffeedsG ; ++extern INT ffeedsG ; + EXTERN INT lrtxspanG ; + EXTERN INT lrtyspanG ; + EXTERN INT ifrangeG ; +@@ -38,7 +37,7 @@ EXTERN INT d_costG ; + EXTERN INT resume_runG ; + EXTERN INT implicit_pins_usedG ; + EXTERN INT rowHeightG ; +-EXTERN INT fdthrusG ; ++extern INT fdthrusG ; + + EXTERN DOUBLE TG ; + EXTERN DOUBLE imprangeG ; diff --git a/cad/graywolf/patches/patch-src_twsc_parser_c b/cad/graywolf/patches/patch-src_twsc_parser_c new file mode 100644 index 00000000000..c20944349b6 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_parser_c @@ -0,0 +1,17 @@ +$OpenBSD: patch-src_twsc_parser_c,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/parser.c +--- src/twsc/parser.c.orig ++++ src/twsc/parser.c +@@ -111,6 +111,8 @@ REVISIONS: Mon Nov 19 04:04:18 EST 1990 - added tempe + INT ECOs_existG = 0 ; + INT orig_max_row_lengthG ; + ++extern INT maxCellOG ; ++ + extern INT totalRG ; + extern INT spacer_widthG ; + extern INT *spacer_feedsG ; diff --git a/cad/graywolf/patches/patch-src_twsc_parser_h b/cad/graywolf/patches/patch-src_twsc_parser_h new file mode 100644 index 00000000000..c02753d5bfd --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_parser_h @@ -0,0 +1,16 @@ +$OpenBSD: patch-src_twsc_parser_h,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/parser.h +--- src/twsc/parser.h.orig ++++ src/twsc/parser.h +@@ -32,7 +32,6 @@ REVISIONS: + EXTERN SWAPBOX *swap_group_listG ; + EXTERN BOOL one_pin_feedthruG ; + +-EXTERN INT maxCellOG ; + EXTERN INT case_unequiv_pinG ; + EXTERN INT celllenG ; + EXTERN INT cells_per_clusterG ; diff --git a/cad/graywolf/patches/patch-src_twsc_readcell_c b/cad/graywolf/patches/patch-src_twsc_readcell_c new file mode 100644 index 00000000000..56d1153dea6 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_readcell_c @@ -0,0 +1,418 @@ +$OpenBSD: patch-src_twsc_readcell_c,v 1.1 2021/02/20 19:12:04 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/readcell.c +--- src/twsc/readcell.c.orig ++++ src/twsc/readcell.c +@@ -654,12 +654,12 @@ int yydebug; + int yynerrs; + int yyerrflag; + int yychar; +-short *yyssp; +-YYSTYPE *yyvsp; ++short *yyssp2; ++YYSTYPE *yyvsp2; + YYSTYPE yyval; + YYSTYPE yylval; +-short yyss[YYSTACKSIZE]; +-YYSTYPE yyvs[YYSTACKSIZE]; ++short yyss2[YYSTACKSIZE]; ++YYSTYPE yyvs2[YYSTACKSIZE]; + #define yystacksize YYSTACKSIZE + + #include "readcell_l.h" +@@ -727,9 +727,9 @@ yyparse() + yyerrflag = 0; + yychar = (-1); + +- yyssp = yyss; +- yyvsp = yyvs; +- *yyssp = yystate = 0; ++ yyssp2 = yyss2; ++ yyvsp2 = yyvs2; ++ *yyssp2 = yystate = 0; + + yyloop: + if (yyn = yydefred[yystate]) goto yyreduce; +@@ -755,12 +755,12 @@ yyloop: + printf("yydebug: state %d, shifting to state %d\n", + yystate, yytable[yyn]); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate = yytable[yyn]; +- *++yyvsp = yylval; ++ *++yyssp2 = yystate = yytable[yyn]; ++ *++yyvsp2 = yylval; + yychar = (-1); + if (yyerrflag > 0) --yyerrflag; + goto yyloop; +@@ -830,20 +830,20 @@ yyinrecovery: + yyerrflag = 3; + for (;;) + { +- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && ++ if ((yyn = yysindex[*yyssp2]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { + #if YYDEBUG + if (yydebug) + printf("yydebug: state %d, error recovery shifting\ +- to state %d\n", *yyssp, yytable[yyn]); ++ to state %d\n", *yyssp2, yytable[yyn]); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate = yytable[yyn]; +- *++yyvsp = yylval; ++ *++yyssp2 = yystate = yytable[yyn]; ++ *++yyvsp2 = yylval; + goto yyloop; + } + else +@@ -851,11 +851,11 @@ yyinrecovery: + #if YYDEBUG + if (yydebug) + printf("yydebug: error recovery discarding state %d\n", +- *yyssp); ++ *yyssp2); + #endif +- if (yyssp <= yyss) goto yyabort; +- --yyssp; +- --yyvsp; ++ if (yyssp2 <= yyss2) goto yyabort; ++ --yyssp2; ++ --yyvsp2; + } + } + } +@@ -882,7 +882,7 @@ yyreduce: + yystate, yyn, yyrule[yyn]); + #endif + yym = yylen[yyn]; +- yyval = yyvsp[1-yym]; ++ yyval = yyvsp2[1-yym]; + switch (yyn) + { + case 6: +@@ -905,7 +905,7 @@ case 37: + break; + case 43: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 48: +@@ -915,33 +915,33 @@ case 48: + break; + case 51: + { +- addCell( yyvsp[0].string, HARDCELLTYPE ) ; ++ addCell( yyvsp2[0].string, HARDCELLTYPE ) ; + } + break; + case 52: + { + not_supported("softcells") ; +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 53: + { +- addCell( yyvsp[0].string, STDCELLTYPE ) ; ++ addCell( yyvsp2[0].string, STDCELLTYPE ) ; + } + break; + case 60: + { +- fix_placement( yyvsp[-6].string, yyvsp[-5].ival, yyvsp[-3].string, yyvsp[0].ival ) ; ++ fix_placement( yyvsp2[-6].string, yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[0].ival ) ; + } + break; + case 61: + { +- add_swap_group( yyvsp[0].string ) ; ++ add_swap_group( yyvsp2[0].string ) ; + } + break; + case 66: + { +- add_legal_blocks( yyvsp[0].ival ) ; ++ add_legal_blocks( yyvsp2[0].ival ) ; + } + break; + case 67: +@@ -951,7 +951,7 @@ case 67: + break; + case 68: + { +- add_initial_orient( yyvsp[0].ival ) ; ++ add_initial_orient( yyvsp2[0].ival ) ; + } + break; + case 72: +@@ -991,58 +991,58 @@ case 78: + break; + case 79: + { +- add_tile( yyvsp[-6].ival, yyvsp[-2].ival, yyvsp[-4].ival, yyvsp[0].ival ) ; ++ add_tile( yyvsp2[-6].ival, yyvsp2[-2].ival, yyvsp2[-4].ival, yyvsp2[0].ival ) ; + } + break; + case 80: + { +- yyval.string = yyvsp[0].string; ++ yyval.string = yyvsp2[0].string; + } + break; + case 81: + { +- yyval.string = yyvsp[0].string; ++ yyval.string = yyvsp2[0].string; + } + break; + case 82: + { +- addCell( yyvsp[0].string, PADTYPE ) ; ++ addCell( yyvsp2[0].string, PADTYPE ) ; + } + break; + case 83: + { +- addCell( yyvsp[-2].string, PADTYPE ) ; +- add_orient(yyvsp[0].ival); ++ addCell( yyvsp2[-2].string, PADTYPE ) ; ++ add_orient(yyvsp2[0].ival); + } + break; + case 84: + { +- add_padside( yyvsp[0].string ) ; +- set_old_format( yyvsp[0].string ) ; ++ add_padside( yyvsp2[0].string ) ; ++ set_old_format( yyvsp2[0].string ) ; + } + break; + case 85: + { +- addCell( yyvsp[-1].string, PADGROUPTYPE ) ; ++ addCell( yyvsp2[-1].string, PADGROUPTYPE ) ; + setPermutation( TRUE ) ; + add_tile( 0,0,0,0 ) ; + } + break; + case 86: + { +- addCell( yyvsp[-1].string, PADGROUPTYPE ) ; ++ addCell( yyvsp2[-1].string, PADGROUPTYPE ) ; + setPermutation( FALSE ) ; + add_tile( 0,0,0,0 ) ; + } + break; + case 87: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 88: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 89: +@@ -1057,12 +1057,12 @@ case 90: + break; + case 93: + { +- add_corner( yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_corner( yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 96: + { +- add_orient(yyvsp[0].ival); ++ add_orient(yyvsp2[0].ival); + } + break; + case 124: +@@ -1082,99 +1082,99 @@ case 132: + break; + case 133: + { +- add_pin( yyvsp[-6].string, yyvsp[-4].string, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_pin( yyvsp2[-6].string, yyvsp2[-4].string, yyvsp2[-2].ival, yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 134: + { +- add_pin( yyvsp[-4].string, yyvsp[-2].string, 0, yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_pin( yyvsp2[-4].string, yyvsp2[-2].string, 0, yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 137: + { +- add_equiv( yyvsp[-4].string, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival, FALSE ) ; ++ add_equiv( yyvsp2[-4].string, yyvsp2[-2].ival, yyvsp2[-1].ival, yyvsp2[0].ival, FALSE ) ; + } + break; + case 138: + { +- add_equiv( yyvsp[-2].string, 0, yyvsp[-1].ival, yyvsp[0].ival, FALSE ) ; ++ add_equiv( yyvsp2[-2].string, 0, yyvsp2[-1].ival, yyvsp2[0].ival, FALSE ) ; + } + break; + case 141: + { +- add_equiv( yyvsp[-4].string, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival, TRUE ) ; ++ add_equiv( yyvsp2[-4].string, yyvsp2[-2].ival, yyvsp2[-1].ival, yyvsp2[0].ival, TRUE ) ; + } + break; + case 142: + { +- add_equiv( yyvsp[-2].string, 0, yyvsp[-1].ival, yyvsp[0].ival, TRUE ) ; ++ add_equiv( yyvsp2[-2].string, 0, yyvsp2[-1].ival, yyvsp2[0].ival, TRUE ) ; + } + break; + case 145: + { +- add_port( yyvsp[-6].string, yyvsp[-4].string, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_port( yyvsp2[-6].string, yyvsp2[-4].string, yyvsp2[-2].ival, yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 146: + { +- add_port( yyvsp[-4].string, yyvsp[-2].string, 0, yyvsp[-1].ival, yyvsp[0].ival ) ; ++ add_port( yyvsp2[-4].string, yyvsp2[-2].string, 0, yyvsp2[-1].ival, yyvsp2[0].ival ) ; + } + break; + case 149: + { +- add_sidespace( yyvsp[0].fval, yyvsp[0].fval ); ++ add_sidespace( yyvsp2[0].fval, yyvsp2[0].fval ); + } + break; + case 150: + { +- add_sidespace( yyvsp[-1].fval, yyvsp[0].fval ); ++ add_sidespace( yyvsp2[-1].fval, yyvsp2[0].fval ); + } + break; + case 155: + { +- add_padside( yyvsp[0].string ) ; ++ add_padside( yyvsp2[0].string ) ; + } + break; + case 158: + { +- add2padgroup( yyvsp[-1].string, TRUE ) ; /* fixed */ ++ add2padgroup( yyvsp2[-1].string, TRUE ) ; /* fixed */ + } + break; + case 159: + { +- add2padgroup( yyvsp[-1].string, FALSE ) ; /* nonfixed */ ++ add2padgroup( yyvsp2[-1].string, FALSE ) ; /* nonfixed */ + } + break; + case 160: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 161: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 162: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 163: + { +- Ysafe_free( yyvsp[0].string ) ; ++ Ysafe_free( yyvsp2[0].string ) ; + } + break; + case 164: + { +- yyval.string = yyvsp[0].string ; ++ yyval.string = yyvsp2[0].string ; + } + break; + case 165: + { + /* convert integer to string */ + /* this allows integers to be used as strings */ +- sprintf( bufferS,"%d", yyvsp[0].ival ) ; ++ sprintf( bufferS,"%d", yyvsp2[0].ival ) ; + /* now clone string */ + yyval.string = Ystrclone( bufferS ) ; + } +@@ -1183,15 +1183,15 @@ case 166: + { + /* convert float to string */ + /* this allows floats to be used as strings */ +- sprintf( bufferS,"%f", yyvsp[0].fval ) ; ++ sprintf( bufferS,"%f", yyvsp2[0].fval ) ; + /* now clone string */ + yyval.string = Ystrclone( bufferS ) ; + } + break; + } +- yyssp -= yym; +- yystate = *yyssp; +- yyvsp -= yym; ++ yyssp2 -= yym; ++ yystate = *yyssp2; ++ yyvsp2 -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +@@ -1201,8 +1201,8 @@ break; + state %d\n", YYFINAL); + #endif + yystate = YYFINAL; +- *++yyssp = YYFINAL; +- *++yyvsp = yyval; ++ *++yyssp2 = YYFINAL; ++ *++yyvsp2 = yyval; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +@@ -1228,14 +1228,14 @@ break; + #if YYDEBUG + if (yydebug) + printf("yydebug: after reduction, shifting from state %d \ +-to state %d\n", *yyssp, yystate); ++to state %d\n", *yyssp2, yystate); + #endif +- if (yyssp >= yyss + yystacksize - 1) ++ if (yyssp2 >= yyss2 + yystacksize - 1) + { + goto yyoverflow; + } +- *++yyssp = yystate; +- *++yyvsp = yyval; ++ *++yyssp2 = yystate; ++ *++yyvsp2 = yyval; + goto yyloop; + yyoverflow: + yyerror("yacc stack overflow"); diff --git a/cad/graywolf/patches/patch-src_twsc_standard_h b/cad/graywolf/patches/patch-src_twsc_standard_h new file mode 100644 index 00000000000..4b35a931ca5 --- /dev/null +++ b/cad/graywolf/patches/patch-src_twsc_standard_h @@ -0,0 +1,17 @@ +$OpenBSD: patch-src_twsc_standard_h,v 1.1 2021/02/20 19:12:05 naddy Exp $ + +Fixes for -fno-common +https://github.com/rubund/graywolf/commit/f47937b66d4d44eafc4224f7c43d556dbf88f05b + +Index: src/twsc/standard.h +--- src/twsc/standard.h.orig ++++ src/twsc/standard.h +@@ -304,7 +304,7 @@ EXTERN DOUBLE vertical_wire_weightG ; + /* the configuration */ + EXTERN INT numcellsG ; + EXTERN INT numtermsG ; +-EXTERN INT numnetsG ; ++extern INT numnetsG ; + EXTERN INT numpadgrpsG ; + EXTERN INT lastpadG ; + EXTERN INT maxtermG ;