1 /**********
2 Copyright 1992 Regents of the University of California.  All rights reserved.
3 **********/
4 
5 /* CKTdltNod
6 */
7 
8 #include "ngspice/ngspice.h"
9 #include "ngspice/cktdefs.h"
10 #include "ngspice/ifsim.h"
11 #include "ngspice/sperror.h"
12 
13 /* ARGSUSED */
14 int
CKTdltNod(CKTcircuit * ckt,CKTnode * node)15 CKTdltNod(CKTcircuit *ckt, CKTnode *node)
16 {
17     return CKTdltNNum(ckt, node->number);
18 }
19 
20 int
CKTdltNNum(CKTcircuit * ckt,int num)21 CKTdltNNum(CKTcircuit *ckt, int num)
22 {
23     CKTnode *n, *prev, *node, *sprev;
24     int	error;
25 
26     if (!ckt->prev_CKTlastNode->number || num <= ckt->prev_CKTlastNode->number) {
27         fprintf(stderr, "Internal Error: CKTdltNNum() removing a non device-local node, this will cause serious problems, please report this issue !\n");
28         controlled_exit(EXIT_FAILURE);
29     }
30 
31     prev  = NULL;
32     node  = NULL;
33     sprev = NULL;
34 
35     for (n = ckt->CKTnodes; n; n = n->next) {
36 	if (n->number == num) {
37 	    node = n;
38 	    sprev = prev;
39 	}
40 	prev = n;
41     }
42 
43     if (!node)
44 	return OK;
45 
46     ckt->CKTmaxEqNum -= 1;
47 
48     if (!sprev) {
49 	ckt->CKTnodes = node->next;
50     } else {
51 	sprev->next = node->next;
52     }
53     if (node == ckt->CKTlastNode)
54 	ckt->CKTlastNode = sprev;
55 
56     error = SPfrontEnd->IFdelUid (ckt, node->name, UID_SIGNAL);
57     tfree(node);
58 
59     return error;
60 }
61