From 7239084e77c4dde43a7d1ec3c6945c6eebe1d5f0 Mon Sep 17 00:00:00 2001 From: h_vogt Date: Sat, 23 Apr 2016 18:19:04 +0200 Subject: [PATCH] inpcom.c, inp_add_levels(), add level info to each line in deck --- src/frontend/inpcom.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 6b7479390..9dceb4868 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -6699,8 +6699,9 @@ inp_meas_current(struct line *deck) static void inp_add_levels(struct line *deck) { - struct line *card, *subc_start = NULL, *subc_prev = NULL; - int skip_control = 0, subs = 0; + struct line *card, *card_prev = deck; + int skip_control = 0, subs = 0, i; + static unsigned short levelinfo[NESTINGDEPTH]; for (card = deck; card; card = card->li_next) { @@ -6725,15 +6726,27 @@ inp_add_levels(struct line *deck) if (*curr_line == '.') { if (ciprefix(".subckt", curr_line)) { subs++; - subc_prev = subc_start; - subc_start = card; + levelinfo[subs - 1]++; + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = levelinfo[i]; + card_prev = card; } else if (ciprefix(".ends", curr_line)) { subs--; - subc_start = subc_prev; + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = card_prev->level[i]; + card_prev = card; } - else - continue; + else { + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = card_prev->level[i]; + card_prev = card; + } + } + else { + for (i = 0; i < NESTINGDEPTH; i++) + card->level[i] = card_prev->level[i]; + card_prev = card; } } }