Create pin and port lists only when variable ps_pins_and_ports is set != 0.

This commit is contained in:
Brian Taylor 2022-05-25 18:49:26 -07:00 committed by Holger Vogt
parent 01e988d604
commit a7b6cb9af7
3 changed files with 25 additions and 11 deletions

View File

@ -8398,7 +8398,6 @@ static struct card *u_instances(struct card *startcard)
if (last_newcard) {
last_newcard->nextcard = card; // the .ends card
}
create_ports_list();
}
}
if (models_not_ok > 0 || udev_not_ok > 0) {

View File

@ -51,6 +51,7 @@
#include "ngspice/stringskip.h"
#include "ngspice/stringutil.h"
#include "ngspice/inpdefs.h"
#include "ngspice/cpextern.h"
#include "ngspice/udevices.h"
extern struct card* insert_new_line(
@ -191,8 +192,6 @@ struct timing_data {
Pin lists contain the names of instance inputs, outputs, tristate outputs.
These pin_lists are created by add_..._pin() calls within the various
gen_..._instance() calls. When a .subckt ... .ends sequence is completed,
create_ports_list() can be called to determine the IN/OUT/INOUT directions
of the subckt ports.
*/
#define DIR_UNKNOWN 0
#define DIR_IN 1
@ -207,6 +206,7 @@ struct pin_entry {
};
static char *subckt_saved = NULL;
static int pins_and_ports = 0; // If non-zero then generate pins and ports
static struct pin_entry *subckt_ports = NULL;
static struct pin_entry *input_pins = NULL;
static struct pin_entry *output_pins = NULL;
@ -218,7 +218,7 @@ static struct pin_entry *add_pin(char *name, int pin_type, BOOL is_port)
char *tmp;
size_t sz;
if (!subckt_saved) {
if (!pins_and_ports || !subckt_saved) {
/* subckt_saved is necessary for the port list */
return NULL;
}
@ -301,28 +301,30 @@ static struct pin_entry *find_pin(char *name, int pin_type, BOOL is_port)
static void add_input_pin(char *name)
{
if (strncmp(name, "$d_", 3) != 0) {
if (pins_and_ports && strncmp(name, "$d_", 3) != 0) {
(void) add_pin(name, DIR_IN, FALSE);
}
}
static void add_output_pin(char *name)
{
if (strncmp(name, "$d_", 3) != 0) {
if (pins_and_ports && strncmp(name, "$d_", 3) != 0) {
(void) add_pin(name, DIR_OUT, FALSE);
}
}
static void add_tristate_pin(char *name)
{
if (strncmp(name, "$d_", 3) != 0) {
if (pins_and_ports && strncmp(name, "$d_", 3) != 0) {
(void) add_pin(name, DIR_TRI, FALSE);
}
}
static void add_port(char *name, int pin_type)
{
add_pin(name, pin_type, TRUE);
if (pins_and_ports) {
add_pin(name, pin_type, TRUE);
}
}
static struct pin_entry *find_input_pin(char *name)
@ -402,6 +404,9 @@ static void print_pin_list(struct pin_entry *plist)
static void print_all_pin_lists(BOOL just_ports)
{
if (!pins_and_ports) {
return;
}
if (subckt_saved) {
printf("%s\n", subckt_saved);
}
@ -413,13 +418,19 @@ static void print_all_pin_lists(BOOL just_ports)
print_pin_list(subckt_ports);
}
void create_ports_list(void)
/*
create_ports_list() can be called to determine the IN/OUT/INOUT directions
of the subckt ports.
*/
static void create_ports_list(void)
{
char *copy_line, *tok, *pos;
BOOL inp = FALSE, outp = FALSE, tri = FALSE;
int port_type;
if (!subckt_saved) { return; }
if (!pins_and_ports || !subckt_saved) {
return;
}
copy_line = tprintf("%s", subckt_saved);
pos = strstr(copy_line, "optional:");
if (pos) {
@ -857,10 +868,15 @@ void initialize_udevice(char *subckt_line)
/* .model d0_tgate utgate () */
xdata = create_xlate("", "", "utgate", "", "d0_tgate", "");
(void) add_xlator(default_models, xdata);
/* Variable ps_pins_and_ports != 0 to turn on pins and ports */
if (!cp_getvar("ps_pins_and_ports", CP_NUM, &pins_and_ports, 0)) {
pins_and_ports = 0;
}
}
void cleanup_udevice(void)
{
create_ports_list();
cleanup_translated_xlator();
delete_xlator(model_xlatorp);
model_xlatorp = NULL;

View File

@ -6,7 +6,6 @@ BOOL u_process_model_line(char *line);
BOOL u_check_instance(char *line);
void initialize_udevice(char *subckt_line);
struct card *replacement_udevice_cards(void);
void create_ports_list(void);
void cleanup_udevice(void);
#endif