Commit Graph

4967 Commits

Author SHA1 Message Date
rlar b3c40a77cf findsubckt(), j_ptr --> name_e - 1 2018-02-17 19:15:55 +01:00
rlar 3d9a76d342 findsubckt(), drop k_ptr--, use k_ptr - 1 instead 2018-02-17 19:15:55 +01:00
rlar 8cd136c6bd findsubckt(), move k_ptr-- beyond the loop 2018-02-17 19:15:55 +01:00
rlar b0b4551d68 findsubckt(), move k_ptr-- to the front of the next loop 2018-02-17 19:15:54 +01:00
rlar d2dac0ea9d findsubckt(), move k_ptr-- beyond the loop 2018-02-17 19:15:54 +01:00
rlar e1f5609568 findsubckt(), exclude the terminating '\0' from the search 2018-02-17 19:15:54 +01:00
rlar a0f9b2bf0f findsubckt(), cleanup 2018-02-17 19:15:54 +01:00
rlar f4bd03a00f findsubckt(), transform pscopy(,x,y,) --> pscopy(,x+y,y-y,) (requirement strlen(x) >= y to be verified later) 2018-02-17 19:15:54 +01:00
rlar c486218e33 findsubckt(), cleanup 2018-02-17 19:15:54 +01:00
rlar a9c2f81878 findsubckt(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar 940eb2a258 findsubckt(), j ==> j_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar cd05eb1d50 findsubckt(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar 78147c2bd9 findsubckt(), k ==> k_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar 81b60b7367 findsubckt(), constness 2018-02-17 19:15:54 +01:00
rlar 849d12b18a defsubckt(), rename j_ptr ==> s_end 2018-02-17 19:15:54 +01:00
rlar 948352a2ed defsubckt(), drop i_ptr, use s instead 2018-02-17 19:15:54 +01:00
rlar 82d4f8544c defsubckt(), check `s' beeing nowhere used anymore 2018-02-17 19:15:54 +01:00
rlar a46e1113d0 defsubckt(), drop `ls_ptr' 2018-02-17 19:15:54 +01:00
rlar 10e9760f13 defsubckt(), transform pscopy(,x,y,) --> pscopy(,x+y,y-y,) (requirement strlen(x) >= y to be verified later) 2018-02-17 19:15:54 +01:00
rlar 44a17a14f7 defsubckt(), cleanup 2018-02-17 19:15:54 +01:00
rlar 9a64579db6 defsubckt(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar d73a265c45 defsubckt(), j ==> j_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar 1a44e4fb42 defsubckt(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar 6d285d927a defsubckt(), i ==> i_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar deca1a05ed defsubckt(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar 4e89b80a75 defsubckt(), ls ==> ls_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar dbcbf62012 defsubckt(), constness 2018-02-17 19:15:54 +01:00
rlar 27884d2512 nupa_assignment(), postpone p++ 2018-02-17 19:15:54 +01:00
rlar f0fa06ea26 nupa_assignment(), whitespace 2018-02-17 19:15:54 +01:00
rlar 0624584370 nupa_assignment(), simplify error processing 2018-02-17 19:15:54 +01:00
rlar 66433eda0b nupa_assignment(), cleanup 2018-02-17 19:15:54 +01:00
rlar 8bded8b878 nupa_assignment(), cleanup 2018-02-17 19:15:54 +01:00
rlar 8f9f03c457 nupa_assignment(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar 0e6ece4370 nupa_assignment(), ls ==> s_end - (const) s 2018-02-17 19:15:54 +01:00
rlar 410e70b9b9 nupa_assignment(), express some constness 2018-02-17 19:15:54 +01:00
rlar 5f0958026b nupa_assignment(), cleanup 2018-02-17 19:15:54 +01:00
rlar ba2c95243f nupa_assignment(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar 8300021c7a nupa_assignment(), i ==> p - (const) s 2018-02-17 19:15:54 +01:00
rlar f595db7619 nupa_assignment(), express some constness 2018-02-17 19:15:54 +01:00
rlar 35524f7e48 getexpress(), rename ls_ptr --> s_end 2018-02-17 19:15:54 +01:00
rlar 043a04b775 getexpress(), simplify usage 2018-02-17 19:15:54 +01:00
rlar 830b5faf0e getexpress(), return one less 2018-02-17 19:15:54 +01:00
rlar 33b8936a3b getexpress(), drop `c' and cleanup 2018-02-17 19:15:54 +01:00
rlar f8fc4edf52 getexpress(), remove const, `pi' and rename xia_ptr --> s 2018-02-17 19:15:54 +01:00
rlar 9494f8d9af getexpress(), change signature, return char * to continue with 2018-02-17 19:15:54 +01:00
rlar 0c363d7b4f getexpress(), return `tpe' per reference 2018-02-17 19:15:54 +01:00
rlar 49bdcc3e3d getexpress(), drop first argument `ls_ptr' 2018-02-17 19:15:54 +01:00
rlar 4bbff47518 getexpress(), first arg s ==> s + strlen(s) 2018-02-17 19:15:54 +01:00
rlar 7fc7202bdf getexpress(), `p' doesn't need to be initialised here 2018-02-17 19:15:54 +01:00
rlar 4a6c7db226 getexpress(), break early
instead of doing nothing and then breaking
2018-02-17 19:15:54 +01:00
rlar 8a3871a0ef getexpress(), transform loop 2018-02-17 19:15:54 +01:00
rlar 92eb2b0437 getexpress(), break early
instead of doing nothing and then breaking anyway
2018-02-17 19:15:54 +01:00
rlar 2f24e6e563 getexpress(), local scope for `c' and `d' 2018-02-17 19:15:54 +01:00
rlar 86ef4b8cb1 getexpress(), transform loop 2018-02-17 19:15:54 +01:00
rlar 1df1e69f5d getexpress(), d == ')' is automatically true
when level has been decremented to level <= 0
2018-02-17 19:15:54 +01:00
rlar 1e6a44af27 getexpress(), transform 2018-02-17 19:15:54 +01:00
rlar 0cc72ae3c1 getexpress(), always true 2018-02-17 19:15:54 +01:00
rlar f87c629e1b getexpress(), break 2018-02-17 19:15:54 +01:00
rlar 9ace8b161f getexpress(), scope 2018-02-17 19:15:54 +01:00
rlar f2013088a6 getexpress(), transform `<' etc comparisons 2018-02-17 19:15:54 +01:00
rlar d1b25d59bb getexpress(), cleanup 2018-02-17 19:15:54 +01:00
rlar a913def4d7 getexpress(), cleanup 2018-02-17 19:15:54 +01:00
rlar ec68ee7b94 getexpress(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar 9ff93246b6 getexpress(), ia_ptr ==> xiaptr + 1 2018-02-17 19:15:54 +01:00
rlar 47db566181 getexpress(), cleanup 2018-02-17 19:15:54 +01:00
rlar 4402686c69 getexpress(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar 6da6f6a4fd getexpress(), iptr ==> p + 1 2018-02-17 19:15:54 +01:00
rlar 7509fa17da getexpress(), transform pscopy(,x,y,) --> pscopy(,x+y,y-y,) (requirement strlen(x) >= y to be verified later) 2018-02-17 19:15:54 +01:00
rlar 0f00fd3043 getexpress(), cleanup 2018-02-17 19:15:54 +01:00
rlar a47348526c getexpress(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar dc8eb2b956 getexpress(), ia ==> ia_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar 44c5410490 getexpress(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar 632829575b getexpress(), ls ==> ls_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar f19ddf6090 getexpress(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar c351f2f19b getexpress(), i ==> iptr - (const) s 2018-02-17 19:15:54 +01:00
rlar d4098d454b getexpress(), third argument, `char **pi' instead of `int *pi' 2018-02-17 19:15:54 +01:00
rlar 57b822e0e9 getexpress(), express some constness 2018-02-17 19:15:54 +01:00
rlar d9a2cec430 getword(), drop s_end argument, which is always == s + strlen(s) 2018-02-17 19:15:54 +01:00
rlar c5966489c9 getword(), return one less 2018-02-17 19:15:54 +01:00
rlar f5d686e23c getword(), cleanup 2018-02-17 19:15:54 +01:00
rlar 51c9f93b7a getword(), substitue s = s - 1 2018-02-17 19:15:54 +01:00
rlar f96eb16255 getword(), (s < x) ==> (s - 1 < x - 1) 2018-02-17 19:15:54 +01:00
rlar cc452a4c90 getword(), transform while loop 2018-02-17 19:15:54 +01:00
rlar d6801c0cf1 getword(), substitute s = s - 1 2018-02-17 19:15:54 +01:00
rlar 68b0be8caa getword(), (s <= x) --> (s - 1 < x) 2018-02-17 19:15:54 +01:00
rlar 10aaa7bcc0 getword(), rename variables 2018-02-17 19:15:54 +01:00
rlar ba4d81b2d9 getword(), reorder args 2018-02-17 19:15:54 +01:00
rlar 6ca0c74cbf getword(), pass s_end instead of s 2018-02-17 19:15:54 +01:00
rlar 3f24aa4ea0 getword(), cleanup 2018-02-17 19:15:54 +01:00
rlar d17bcbc276 getword(), change signature 2018-02-17 19:15:54 +01:00
rlar d3d966b027 getword(), cleanup 2018-02-17 19:15:54 +01:00
rlar 52ec0a262c getword(), fix lvalue 2018-02-17 19:15:54 +01:00
rlar 2514664f7a getword(), ls ==> ls_ptr - (const) s 2018-02-17 19:15:54 +01:00
rlar d5893cd1cb getword(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar 51dc7037d3 getword(), i ==> iptr - (const) s 2018-02-17 19:15:54 +01:00
rlar 051c3f4137 getword(), third argument, `char **pi' instead of `int *pi' 2018-02-17 19:15:54 +01:00
rlar 6ba5a05905 getword(), drop `after' argument which is identical to `*pi' 2018-02-17 19:15:54 +01:00
rlar cf9c3fc4f8 getword(), express some constness 2018-02-17 19:15:54 +01:00
rlar 6a72c09b5f insertnumber(), return char pointer instead of integer index 2018-02-17 19:15:54 +01:00
rlar 34e37f393c insertnumber(), rename s_ ==> s 2018-02-17 19:15:54 +01:00
rlar 1f15329745 insertnumber(), drop second argument 2018-02-17 19:15:54 +01:00
rlar 9f6173cd0b insertnumber(), add second arg on invocation 2018-02-17 19:15:54 +01:00
rlar a2ddc6bf2a insertnumber(), express some constness 2018-02-17 19:15:54 +01:00
rlar b41b8e7138 insertnumber(), add `i' on invocation 2018-02-17 19:15:54 +01:00
rlar 160529cf59 insertnumber(), express some constness 2018-02-17 19:15:54 +01:00
rlar e8bc7df5c3 insertnumber(), emphasize return i + ... 2018-02-17 19:15:54 +01:00
rlar 06501162e5 nupa_substitute(), make use of the transformations 2018-02-17 19:15:54 +01:00
rlar 2a446c2119 nupa_substitute(), use `strncasecmp()' 2018-02-17 19:15:54 +01:00
rlar c036fa0519 nupa_substitute(), cleanup 2018-02-17 19:15:54 +01:00
rlar 81cb1ed674 nupa_substitute(), drop s_ 2018-02-17 19:15:54 +01:00
rlar 5416ecaab9 nupa_substitute(), rename iptr --> s 2018-02-17 19:15:54 +01:00
rlar 18f69116e8 nupa_substitute(), verify `s' beeing unused now 2018-02-17 19:15:54 +01:00
rlar 03abdc65f5 nupa_substitute(), cleanup 2018-02-17 19:15:54 +01:00
rlar 53b23cf4b6 nupa_substitute(), transform pscopy(,x,y,) --> pscopy(,x+y,y-y,) (requirement strlen(x) >= y to be verified later) 2018-02-17 19:15:54 +01:00
rlar 8e69f7e70a nupa_substitute(), cleanup 2018-02-17 19:15:54 +01:00
rlar 0bea4987c4 nupa_substitute(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar b47123ac6a nupa_substitute(), i ==> iptr - (const) s 2018-02-17 19:15:54 +01:00
rlar b832578f0e nupa_substitute(), fix lvalues 2018-02-17 19:15:54 +01:00
rlar ccf34637b3 nupa_substitute(), k ==> kptr - (const) s 2018-02-17 19:15:54 +01:00
rlar 551aae4b05 nupa_substitute(), drop ls 2018-02-17 19:15:54 +01:00
rlar 4af5a78bb5 nupa_substitute(), ls ==> s_end - (const) s 2018-02-17 19:15:54 +01:00
rlar fb3a1be6a5 nupa_substitute(), express some constness 2018-02-17 19:15:54 +01:00
rlar aa5d48da3b nupa_substitute(), drop unused argument `err' 2018-02-17 19:15:54 +01:00
rlar e212566176 evaluate_variable(), change signature, pass substring instead of string
side effect:
  string `t' is no longer globally upcased, which is is of no consequence
  for the single place where evaluate_variable() is invoked
2018-02-17 19:15:54 +01:00
rlar 3f7951d187 evaluate_expr(), change signature, pass substring instead of string 2018-02-17 19:15:54 +01:00
rlar 7aa3664157 numparam, drop some typedefs 2018-02-17 19:15:54 +01:00
rlar fa14255fc9 numparam, use `strtoupper()', drop `stupcase()' 2018-02-17 19:15:54 +01:00
rlar a0a3f48227 numparam/xpressn.c, remove an artifact 2018-02-17 19:15:54 +01:00
rlar 7b175dd1c4 numparam, drop unused `srcfile' 2018-02-17 19:15:54 +01:00
rlar 4f8bef997d numparam, nupa_signal(), drop useless return value 2018-02-17 19:15:54 +01:00
rlar 5b194f1679 numparam, drop unused stuff 2018-02-17 19:15:54 +01:00
rlar 15e8fab975 numparam, use `trunc()' 2018-02-17 19:15:54 +01:00
rlar 31ca73a6f0 numparam, use `isdigit_c()' 2018-02-17 19:15:54 +01:00
rlar e88e75a8d4 numparam, use `toupper_c()' 2018-02-17 19:15:54 +01:00
rlar 6d5b968464 numparam, use `tolower_c()' 2018-02-17 19:15:54 +01:00
rlar 3b0a595ecf numparam/mystring.c, drop defect and unused `ccopy()' 2018-02-17 19:15:54 +01:00
rlar db8f8fc062 numparam/mystring.c, fix `pscopy()' and `pscopy_up()' 2018-02-17 19:15:54 +01:00
rlar 6a328ef609 numparam, drop `length()' 2018-02-17 19:15:54 +01:00
rlar 15dd80c0e7 numparam, drop `cpos()' 2018-02-17 19:15:54 +01:00
rlar e324e4aac3 numparam/spicenum.c, use type `bool' 2018-02-17 19:15:54 +01:00
rlar cd260cf45a numparam/spicenum.c, stripsomespace(), cleanup 2018-02-17 19:15:54 +01:00
rlar a9a8afa12d numparam/xpressn.c, split `evaluate()' into two functions 2018-02-17 19:15:54 +01:00
rlar 6da961c3f1 numparam/xpressn.c, evaluate(), drop local `numeric'
and return instantly when formula() reports an error
2018-02-17 19:15:54 +01:00
rlar 7549b3409e numparam/xpressn.c, abstraction, introduce `double_to_string()' 2018-02-17 19:15:54 +01:00
rlar 6d4fc501bd numparam/xpressn.c, evaluate_variable(), cleanup `for' loop 2018-02-17 19:15:54 +01:00
rlar fdfaf0c84a numparam/xpressn.c, don't mess the case of quoted strings
and drop `dico_t.option' which is nowhere set
2018-02-17 19:15:54 +01:00
rlar 23f6d51c67 numparam/xpressn.c, evaluate(), drop local `done' and `lq'
no longer limit the length of a quoted string parameter
2018-02-17 19:15:54 +01:00
rlar e970e8c4ea numparam/xpressn.c, evaluate(), drop `dt' 2018-02-17 19:15:54 +01:00
rlar 00c3d2f79e numparam/xpressn.c, drop `getidtype()' 2018-02-17 19:15:54 +01:00
rlar 34040a592d numparam, #3/3, remove global `nupa_inst_name' 2018-02-17 19:15:54 +01:00
rlar 1bf2590caa numparam, #2/3, avoid global `nupa_inst_name' 2018-02-17 19:15:53 +01:00
rlar ca4278685d numparam, #1/3, avoid global `nupa_inst_name' 2018-02-17 19:15:53 +01:00
rlar 495eef349d numparam/xpressn.c, nupa_subcktcall(), drop unused `err' argument 2018-02-17 19:15:53 +01:00
rlar 979175fbc6 numparam/xpressn.c, findsubckt(), drop unused `subname' argument 2018-02-17 19:15:53 +01:00
rlar f42c8d60b4 numparam/spicenum.c, use `copy_substring()' 2018-02-17 19:15:53 +01:00
rlar 49e03cdcb2 numparam, entry_type, #5/5, rewrite to get rid of 'NUPA_SPACE'
use fact: 'entry' !== NULL
2018-02-17 19:15:53 +01:00
rlar c761c74a22 numparam, entry_type, #4/5, drop 'nolookup' which has known value here 2018-02-17 19:15:53 +01:00
rlar b7b6d9ace3 numparam, entry_type, #3/5, drop unused 'NUPA_POINTER'
'NUPA_POINTER' is nowhere assigned to storage
  thus 'nupa_type' variables can never have this value
2018-02-17 19:15:53 +01:00
rlar 09d92ba692 numparam, entry_type, #2/5, use a type-checked enum for 'nupa_type' 2018-02-17 19:15:53 +01:00
rlar 6a1c9f934c numparam, entry_type, #1/5, introduce typedef 'nupa_type' 2018-02-17 19:15:53 +01:00
rlar 21f2187530 numparam/xpressn.c, #5/5, drop unused assignment 2018-02-17 19:15:53 +01:00
rlar 1820f5547f numparam/xpressn.c, #4/5, use a local 'c' instead of 'dt' 2018-02-17 19:15:53 +01:00
rlar 85f48726ea numparam/xpressn.c, #3/5, whitespace 2018-02-17 19:15:53 +01:00
rlar 146ca72153 numparam/xpressn.c, #2/5, cleanup, drop 'err' and return early 2018-02-17 19:15:53 +01:00
rlar 303d78f616 numparam/xpressn.c, #1/5, cleanup, rewrite upside down
and use known variable values to instantly 'return'
instead of skipping some 'if' bodies
2018-02-17 19:15:53 +01:00
rlar bc0782aba1 numparam, #4/4, defsubckt(), use struct card * argument 2018-02-17 19:15:53 +01:00
rlar 2a149d7541 numparam, #3/4, nupa_scan(), use struct card * argument 2018-02-17 19:15:53 +01:00
rlar 77da3c6f26 numparam, #2/2, nupa_copy(), use struct card * argument 2018-02-17 19:15:53 +01:00
rlar 19dfaf03f3 numparam, #1/2, nupa_eval(), use struct card * argument 2018-02-17 19:15:53 +01:00
rlar ee489599cb struct card, #6/6, drop some redundant casts 2018-02-17 19:15:53 +01:00
rlar 4ec2717079 struct card, #5/6, rewrite from type "card" to "struct card" 2018-02-17 19:15:53 +01:00
rlar 10a353ebf4 struct card, #4/6, drop typedef card
For readability and to allow variables to have the name "card"
(avoid name collision with typedef "card")
2018-02-17 19:15:53 +01:00
rlar 511cdd7188 struct card, #3/6, rename members from struct line to struct card 2018-02-17 19:15:53 +01:00
rlar 981fed70ca struct card, #2/6, drop struct line
struct line is an overlay of struct card.
2018-02-17 19:15:53 +01:00
rlar 8d93511a96 struct card, #1/6, minor cleanup 2018-02-17 19:15:53 +01:00
rlar 121a46f9cb frontend/com_alias.c, asubst(), bug fix
wl_word can not be incremented,
  this is a pointer to malloc'ed space
  and will eventually be free'ed
2018-02-17 15:30:06 +01:00
rlar 41c0ee45a2 introduce GENinstanceFree() and GENmodelFree()
To abstract away the business of releasing the memory
  of a struct GENmodel or struct GENinstance.
2018-02-17 11:53:07 +01:00
rlar 8c7d7051ae GENmodel, GENinstance, change layout, #4/4, complete the change
currently each and every device specific instance and model structure
  duplicates the memory layout of a struct GENmodel / GENinstance

further the first structure elements behind a GENinstance header
  are reinterpreted as a sort of a generic "node" array.

This business is very error prone, and makes it difficult to
  extend struct GENmodel / struct GENinstance.

This patch makes this business much more bearable.
2018-02-17 11:53:06 +01:00
rlar 2c9bfecbad GENmodel, GENinstance, change layout, #3/4, coccinelle semantic patch 2018-02-17 11:53:05 +01:00
rlar c25aea6815 GENmodel, GENinstance, change layout, #2/4, complete the change
fix the .xml files too
2018-02-17 11:53:03 +01:00
rlar 2dcb79d09c GENmodel, GENinstance, change layout, #1/4, coccinelle semantic patch 2018-02-17 11:53:01 +01:00
rlar 4748c92de9 DEVdestroy(), change API, #2/2, complete the change, inclusive CKTdestroy()
loop over DEVmodDelete() and DEVdelete() in CKTdestroy()
  instead of doing this business in the DEVdestroy() functions.

As a consequence, most DEVdestroy() functions
  collapse completely.
2018-02-17 11:52:59 +01:00
rlar 1befa488f6 DEVdestroy(), change API, #1/2, coccinelle semantic patch 2018-02-17 11:52:58 +01:00
rlar b29ad51a6c DEVdestroy(), move code over to DEVmodDelete() and DEVdelete()
This patch itself is not valid until all invokers of DEVdestroy()
  (currently this is CKTdestroy() exclusively)
  are rewritten to invoke DEVmodDelete() and DEVdelete()
2018-02-17 11:52:55 +01:00
rlar 3cd81295a8 DEVmodDelete(), change API, #2/2, complete the change
Instead of searching and then deleting a given device-model,
  just delete the given model.

The search shall be done somewhere else.

Don't free the model struct itself,
  this shall be done by the invoker himself.

Don't free the device instrance list,
  this shall be done by the invoker himself.

As a consequence, most DEVmodDelete() functions
  collapse almost completely.

This change is of no consequence,
  because DEVmodDelete() is currently nowhere used.
2018-02-17 11:52:53 +01:00
rlar b17ee71576 DEVmodDelete(), change API, #1/2, coccinelle semantic patch 2018-02-17 11:52:51 +01:00
rlar 50e9a8c3b6 DEVmodDelete(), extend ASRCdelete() and use it in ASRCmDelete()
rip instance specific cleanup business from the ASRCmDelete() function.
move this to ASRCdelete()
2018-02-17 11:52:49 +01:00
rlar c3ed42f486 DEVdelete(), change API, #2/2, complete the change
Instead of searching and then deleting a given device-instance,
  just delete the given instance.

The search shall be done somewhere else.

Don't free the instance struct itself,
  this shall be done by the invoker.

As a consequence most DEVdelete() functions
  collapse almost completely.

This change is of no consequence,
  because DEVdelete() is currently nowhere used.
2018-02-17 11:52:46 +01:00
rlar e0f1e5a3de DEVdelete(), change API, #1/2, coccinelle semantic patch 2018-02-17 11:52:44 +01:00
rlar a8e440eabe whitespace cleanup, comments cleanup, line wrap 2018-02-14 18:53:30 +01:00
rlar ec4b7ffecd adms/admst/ngspiceMODULE*.c.xml, drop "register" declaration 2018-02-12 17:56:00 +01:00
rlar 57f9804db6 devices/adms/admst/ngspiceMODULEdel.c.xml, bug fix, endless loop
A missing update of "prev" would cause endless looping
  when searching for a device instance.

introduced in commit:
> commit 38e68869a2
> Date:   Wed Mar 1 14:30:24 2006 +0000
>
>     Added mdel, del and dest functions to interface.
2018-02-12 17:55:59 +01:00
rlar cd95ad62f2 devices/ndev/ndevdel.c, remove a redundant `return' 2018-02-12 17:55:58 +01:00
rlar efbb7badbc extend commit: spicelib/devcies/*dest.c, rewrite DEVdestroy() functions
rewrite admst/ngspiceMODULEdest.c.xml too, see commit

> commit 4d79617cf1
> Date:   Fri Jul 29 22:22:16 2016 +0200
>
>     spicelib/devcies/*dest.c, rewrite DEVdestroy() functions
2018-02-12 17:55:57 +01:00
rlar 88c50afcd9 parser/inpdpar.c, #6/6, cleanup, introduce find_instance_parameter() 2018-02-03 17:54:15 +01:00
rlar cf0c9eac06 parser/inpdpar.c, #5/6, cleanup, use a local `IFparm *' 2018-02-03 17:54:06 +01:00
rlar f88cfa5d55 parser/inpdpar.c, #4/6, cleanup, use a local `IFdevice *' 2018-02-03 17:53:57 +01:00
rlar 36f3263727 parser/inpdpar.c, #3/6, cleanup, whitespace 2018-02-03 17:53:48 +01:00
rlar 4140af6d29 parser/inpdpar.c, #2/6, cleanup, use a 'switch' 2018-02-03 17:53:38 +01:00
rlar eb86a66146 parser/inpdpar.c, #1/6, cleanup, search, break then process 2018-02-03 17:53:28 +01:00
rlar bdf6091da7 parser/inpgmod.c, #6/6, cleanup, introduce find_model_parameter() 2018-02-03 17:29:33 +01:00
rlar 45e98db44c parser/inpgmod.c, #5/6, cleanup, loop with a `IFparm *' 2018-02-03 17:29:32 +01:00
rlar b75aba17a4 parser/inpgmod.c, #4/6, cleanup, use a local `IFdevice *' 2018-02-03 17:29:32 +01:00
rlar 63df147cdb parser/inpgmod.c, #3/6, cleanup, local variables 2018-02-03 17:29:32 +01:00
rlar ac34d19c94 parser/inpgmod.c, #2/6, cleanup, fuse the if's 2018-02-03 17:29:32 +01:00
rlar edceabbb54 parser/inpgmod.c, #1/6, cleanup, search, break then process 2018-02-03 17:29:30 +01:00
rlar 6c71fef6f6 parser/inpgmod.c, create_model(), drop obfuscated 'txl' processing
Dependent on given R and L parameter values,
  "txl" models might be transformed to "cpl" models in INPdomodel().
This would cause a "unrecognized parameter" warning in create_model()
  when searching for the "txl" flag in the "cpl" model,
  which is avoided with some awkward extra processing in inpgmod.c

This commit removes this special processing
  by addition of an "alias" parameter "txl" to the
  "cpl" module parameter description CPLmPTable[] in "cpl.c"

Note,
  setModelParm() is a no-op for "cpl" and "txl"
  see case CPL_MOD_R in
    function CPLmParam()
  and case TXL_MOD_R in
    function TXLmParam()
2018-02-03 15:55:22 +01:00
rlar aa27c8969c parser/inpgmod.c, fix an almost bug, (level=...)
When 'level' is a valid model parameter,
  then it was processed like any other parameter,
but additionally the
  `if (strcmp(parm, "level") == 0)'
invoked INPgetValue() a second time.

This special processing is meant to allow "level" for all models
  whether they make use of it or not.

The excess invocation of INPgetValue() didn't cause harm,
  merely because the next token after the "level=number"
almost necessarily is a string (the beginning "name=" of the next assignment)
thus not a parse-able number,
thus the second INPgetValue() didn't modify the 'line' pointer.

To sanitise the code invoke the "level" skipping only if "level"
  is not recognised as a valid model parameter.
2018-02-03 15:39:20 +01:00
rlar 668123ae44 analysis/cktpname.c, #4/4, cleanup 2018-02-03 13:17:17 +01:00
rlar 30550370fb analysis/cktpname.c, #3/4, cleanup obfuscated loop termination 2018-02-03 13:16:40 +01:00
rlar d85ceb85cb analysis/cktpname.c, #2/4, cleanup, use a local `IFparm *' 2018-02-03 13:16:12 +01:00
rlar 1d60387617 analysis/cktpname.c, #1/4, cleanup, use a local `IFdevice *' 2018-02-03 13:16:01 +01:00
rlar fbc1f37b36 mif/mifdelete.c, fix commit: xspice, implement "CALLBACK"
MIFdelete() might be called with third arg being NULL,
  searching for the instance to be deleted by name only.
Need to invoke the callback in this case too.
2018-02-03 12:20:23 +01:00
rlar e311096429 gendef.h, get rid of awkward counted GENnode macros 2018-02-03 11:46:24 +01:00
rlar 018a2d0e2f devices/*, unify, add missing instance struct member 'GENstate'
to the generic part of all instance structs, even when actually unused.
see GENstate in "gendefs.h"
2018-02-03 11:46:24 +01:00
rlar 9f68d8cd68 devices/*, fix spelling of some struct members 2018-02-03 09:46:13 +01:00
rlar f53384da70 devices/*, USE_OMP, cleanup 'InstanceArray' usage
store 'InstanceArray' in the very first module only,
  NULL it in any other.

FREE() it in every module to treat them all the same in XXXdestroy()
2018-02-02 23:03:55 +01:00
rlar 93b62297d8 devices/mos6, add missing files mos6del.c and mos6mdel.c
this is a plain copy from mos3
2018-02-02 22:53:43 +01:00
rlar fb6b4adaa5 devices/bsimsoi/b4soidest.c, fix commit: "OpenMP for B4SOI version 4.3.1"
> commit 39c98ad798
> Date:   Fri Jul 2 09:35:05 2010 +0000
>
>     OpenMP for B4SOI version 4.3.1
2018-02-02 22:35:59 +01:00
rlar 3763f9914e devices/nbjt/nbjtdefs.h, fix commit: "mark end of struct GENmodel overlay"
> commit 3794c1eb20
> Date:   Sat Jun 22 18:40:48 2013 +0200
>
>     mark end of struct GENmodel overlay
2018-02-02 22:24:10 +01:00
rlar caf3115733 cleanup, emphasise CKTrhs being an array
when accessing slot [0]
2018-01-29 19:51:13 +01:00
Holger Vogt 560cb6e970 plotting/grid.c, bug fix, avoid string buffer overflow
Prevent a crash of example/FFT_test.cir.
Buffer 'buf' in function drawlingrid() has been too small.
Increase 'buf' size, and add some protection.

The example file examples/plot/test-small-plot.cir
shows the limits of plotting:
  difference in two numbers at digit 14 is plotted well.
                            at digit 15 is plotted with bugs.
                            at digit 16 is reduced to integer.

consider compiling with
  -O1 -D_FORTIFY_SOURCE=2
for gcc, and
  /GS
for visual studio.
2018-01-27 21:58:15 +01:00
rlar c892b2d460 analysis/acan.c, check for valid startfreq
an 'ac dec' or 'ac oct' can not have a startfreq <= 0
2018-01-20 10:55:26 +01:00
rlar c5d8ad792e analysis/acsetp.c, ac analysis, allow frequency=0 2018-01-15 19:04:52 +01:00
rlar 57a0a5dec0 devices/bjt/bjttemp.c, bug fix, capacity temperature dependency
Fix a very old bug in the implementation of the
  gummel-poon model formulas for the junction capacities.
  (already in spice3f4)
For unknown reasons, the same formulas in the
  diode mos1 mos2 mos6 jfet models
have been implemented correctly right from the beginning,
the typo was bjt specific.

Many Thanks for the concise and precise Bug Report
  provided by Schabo Rumanus on the ngspice-users mailing list
> To: ngspice-users@lists.sourceforge.net
> Subject: [Ngspice-users] Temperatursimulation von Sperrschichtkapazitäten

Many Thanks to Dietmar Warning for his thorough verification
  of this commit.
2017-12-20 18:02:13 +01:00
rlar f0159cbd0b numparam/spicenum.c, stripbraces(), bug fix
overwriting SPICE_DSTRING `dstr_p' may invalidate `s'

This bug was injected with the introduction of SPICE_DSTRING in :
> commit 76feebbbfa
> Date:   Thu Feb 25 21:43:03 2010 +0000
>     various bug fixes
2017-11-13 20:36:49 +01:00
rlar 84761c125f fix erfc() usage in cider
cider relied on our broken ngspice variant of erfc() which behaved as
  erfc_ngspice(x) = erfc(fabs(x))

Note:
  apart from cider, erfc is used in
    devices/ltra/ltramisc.c
      always with positive argument
  and
    src/frontend/spec.c
      again always with positive argument
Thus, the difference in implementation
 never mathered anywhere except in cider
2017-10-28 12:38:36 +02:00
rlar c900cc8824 drop ngspice internal implementation of erfc()
which these days is guaranteed to be provided by <math.h>

note,
  our own implementation was incorrect anyway.
  it evaluated to
    erfc_ngspice(x) = erfc(fabs(x))
2017-10-28 12:38:32 +02:00
rlar ca57447f6c fix commit "devices/bsim3v32: apply Area Calculation Method (ACM) to the bsim3v3.2.4 model"
which moved processing of several parameters into a new function
  ACM_SourceDrainResistances()
but did so incompletely.

As a consequence the matrix footprint was not correctly modified
 when source or drainresistance is zero

Thanks for the bug report by "Sto" in message
>  bug: mosfet models with deliberate NRD=0 (ngspice-27)
https://sourceforge.net/p/ngspice/discussion/133842/thread/fa39228d
2017-10-21 20:22:43 +02:00
Holger Vogt f868418d13 ACM_SourceDrainResistances(), fix misleading signature
This function does return resistance, not conductance.
2017-10-21 20:21:34 +02:00
rlar 57f3d35ddc devices/res, #6/6, rename variables back to their original names
strip the X in RESconductX, REScurrentX, RESacConductX
2017-10-21 19:05:28 +02:00
rlar 93ab0fb0e0 devices/res, #5/6, RESconduct, include RESm
Henceforward RESconduct (renamed to RESconductX) shall include factor RESm.
That's a mere rewrite and doesn't change functionality.
2017-10-21 19:05:28 +02:00
rlar afd5147f98 devices/res, #4/6, RESacConduct, include RESm
Henceforward RESacConduct (renamed to RESacConductX) shall include factor RESm.
That's a mere rewrite and doesn't change functionality.
2017-10-21 19:05:28 +02:00
rlar 6941c43673 devices/res, #3/6, RESacConduct, collect RESm
Reshape the sourcecode to emphasize the RESm * RESacConduct affiliation.
That's a mere rewrite and doesn't change functionality.
2017-10-21 19:05:28 +02:00
rlar 7edd241e96 devices/res, #2/6, RESconduct, collect RESm
Reshape the sourcecode to emphasize the RESm * RESconduct affiliation.
That's a mere rewrite and doesn't change functionality.
2017-10-21 19:05:28 +02:00
rlar 5b23f0c684 devices/res, #1/6, REScurrent, include RESm
Henceforward REScurrent (renamed to REScurrentX) shall include factor RESm.
That's a mere rewrite and doesn't change functionality.
2017-10-21 19:05:28 +02:00
rlar f73a353d6b devices/res/resnoise.c, cleanup using pow() 2017-10-21 19:05:28 +02:00
rlar abb07c4306 devices/res/restemp.c, RESupdate_conduct(), avoid excess warnings
This function is invoked several times during initialisation,
  possibly with yet incomplete model and instance parameter settings.
And it might be invoked many times during dc sweep.
2017-10-21 19:05:28 +02:00
rlar cffab98882 devices/res/resparam.c, bug fix, alter resistance not honoured when resuming a transient simulation
When "alter" is invoked after a break-point stopped a transient simulation,
then it might be necessary to update RESconductance
before continuing the transient simulation.

Thanks for the bug report to An Zou
in message "alter resistor value" on the ngspice-users forum
https://sourceforge.net/p/ngspice/discussion/133842/thread/33ce6855/
2017-10-21 19:05:28 +02:00
rlar 0e1294b3b5 devices/res/resparam.c, whitespace and parenthesis 2017-10-21 19:05:27 +02:00
rlar 0a48e6f2a7 devices/res, introduce RESupdate_conduct()
which will be usefull later
2017-10-21 19:05:27 +02:00
rlar 0af576a7d8 devices/res/resask.c, bug fix, set and query of RESresist and RESacResist shall comute
Note:
  RESresist and RESacResist are device parameters
     they do not reflect effective resistance when "ask"'ed
     (don't reflect tc1, tc2, tce, m, scale, temp ...)
  RESconduct and RESacConduct are "query-only" parameters
     these report the effective conductance when "ask"'ed
     (including tc1, tc2, tce, m, scale, temp ...)
2017-10-21 19:05:27 +02:00
rlar 1c5e954b47 devices/res, bug fix, semantics of "short" and "narrow", aka "dlr" and "dw"
These need to be subtracted from both sides
2017-10-21 19:05:27 +02:00
Fabio Rossi 4c503c1e47 src/tclspice.c, bug fix, broken trimming of the "spice::" namespace
Due to a missing break in the for(;;) loop,
  causing the loop to walk beyond end of string argv[0],
  causing random behaviour.
2017-10-19 17:58:02 +02:00
rlar 91c60c28df whitespace change, avoid gcc warnings due to missleading indentation 2017-09-16 20:38:27 +02:00
h_vogt b3827f6488 gnuplot.c, correct the setting of limits in log plots 2017-09-16 20:37:24 +02:00
dwarning 2fd3c4d94f fix the still existing wrong array access in psd smooth routine 2017-09-05 11:28:14 +02:00
h_vogt ca3a9bb648 com_fft.c, correct scaling and filtering for PSD 2017-09-01 23:16:25 +02:00
dwarning 0ef666ea26 com_psd: Correct the special handling of dc and nyquist component in fftw branch 2017-08-26 17:20:19 +02:00
dwarning 2377d3a64f fix wrong write and read in not allocated memory 2017-08-22 11:53:20 +02:00
dwarning b8a9ca9df4 correct the fft scaling for real input and complex output vector 2017-08-16 21:35:41 +02:00
h_vogt 060e0037f8 main.c, add USERPROFILE to search path for .spiceinit
search sequence: current directory, HOME, USERPROFILE
2017-08-12 18:27:11 +02:00
h_vogt 3814201d13 Add function read_initialisation_file().
extend search path for .spiceinit, search sequence now is:
current directory, user HOME directory, user USERPROFILE directory
2017-08-12 18:03:54 +02:00
h_vogt 07ea6466ad configure option --enable-relpath
add relative path ../lib to spinit for codemodels
and search path in ivars.c, independently from
install path which has to be an absolute path
2017-08-12 17:37:19 +02:00
dwarning a1d27b4257 dio, introduce qd as an alias for diode charge to get the right unit in plotting 2017-08-03 17:03:10 +02:00
dwarning 14fc59b83d bjt, jfet, vbic, dio: allow plotting of small signal parameter like charges, capacitances and conductances in dc sweeps 2017-08-03 17:03:01 +02:00
rlar 0db861e4a6 device.c, bug fix commit "device.c, #8/19, use parent wordlist ..."
This commit did rely on the existence of a parent 'wordlist' element,
  usually guranteed by a leading "alter" or "altermod" command word.
But 'inp_evaluate_temper()' passes a wordlist without any parent word
  when invoking 'com_altermod()'
2017-07-30 12:17:43 +02:00
rlar 5542f2ec10 dio/diotemp.c, drop DIOgradingCoeff limit
Used to be limited to a maximum of 0.9
Varactors may need much larger values.

Thanks to Wang You for hinting to this ancient relict.
2017-07-29 19:15:40 +02:00
dwarning 998495c11b prevent wrong version selection if model parameter is given in exponential format 2017-07-13 09:25:04 +02:00
rlar 043d3b4f6d device.c, #19/19, whitespace 2017-07-06 17:56:23 +02:00
rlar aa50718573 device.c, #18/19, polish comments 2017-07-06 17:56:22 +02:00
rlar b4b32e2b93 device.c, #17/19, drop unused assignment to 'eqword' 2017-07-06 17:56:22 +02:00
rlar fac04193e5 device.c, #16/19, shrink scope of variable 'p' 2017-07-06 17:56:22 +02:00
rlar 3eda944db5 device.c, #15/19, make use of 'wl_find()' 2017-07-06 17:56:22 +02:00
rlar 20c303eb8b device.c, #14/19, drop variable 'wl2', can use 'wl' instead 2017-07-06 17:56:22 +02:00
rlar e8ebfb115e device.c, #13/19, drop artificial rewind to the beginning of the list 2017-07-06 17:56:22 +02:00
rlar 79cc996a93 device.c, #12/19, shrink scope of variable 'wlen' and 'maxelem' 2017-07-06 17:56:22 +02:00
rlar c2c4683b4b device.c, #11/19, shrink scope of variable 'wlin' 2017-07-06 17:56:22 +02:00
rlar b817ca8cf7 device.c, #10/19, drop unused assignment to 'wl2' 2017-07-06 17:56:21 +02:00
rlar 9085084ccb device.c, #9/19, drop variable 'rhs' 2017-07-06 17:56:21 +02:00
rlar 1ff0500117 device.c, #8/19, use parent wordlist to restore beginning of the list 2017-07-06 17:56:21 +02:00
rlar 01039f81a2 device.c, #7/19, use a local wordlist *wn 2017-07-06 17:56:21 +02:00
rlar 50dd15093e device.c, #6/19, this 'wl2' wont be used anywhere 2017-07-06 17:56:21 +02:00
rlar 26f7a0e04e device.c, #5/19, drop 'eqfound', equivalent to 'wl != NULL' 2017-07-06 17:56:21 +02:00
rlar 3f09ab6634 device.c, #4/19, loop wont be executed, and 'step' wont be used any more 2017-07-06 17:56:21 +02:00
rlar 3baaa57d18 device.c, #3/19, move some code up 2017-07-06 17:56:21 +02:00
rlar 670d87a589 device.c, #2/19, 'wl' will not be used any more 2017-07-06 17:56:21 +02:00
rlar 1eca384a94 device.c, #1/19, can 'break' here, because 'wl' is NULL 2017-07-06 17:56:04 +02:00
h_vogt 761f3915f5 device.c, 'alter', don't insert empty "" token
when entering ' =' or '= ' in interactive mode
2017-07-06 17:55:06 +02:00
h_vogt d06f39f67d device.c, bug #342, prevent crash when using 'alter'
#342 SegFault alter command
https://sourceforge.net/p/ngspice/bugs/342/
2017-07-06 17:55:02 +02:00
rlar 9ddd1d7d40 fix commit: inp2q.c, #18/23, rewrite, combine two 'for' loop's
which replaced a INPgetNetTok() by INPgetTok()
causing a bug when handling special node names
for example this case
  q1 /c /c 0 npnmodel
2017-07-05 21:09:30 +02:00
rlar 2b17f3292d inpcom.c, inp_add_control_section(), upside down for readability 2017-06-25 14:37:13 +02:00
rlar 76bbaf4ac3 inpcom.c, inp_sort_params(), use insert_deck() 2017-06-25 14:37:13 +02:00
rlar a26ec804cb inpcom.c, inp_reorder_params_subckt(), introduce insert_deck() 2017-06-25 14:37:13 +02:00
rlar c285602105 inpcom.c, inp_reorder_params_subckt(), reorder 2017-06-25 14:37:13 +02:00
rlar bc62407226 inpcom.c, drop unused artefact xx_new_line() 2017-06-25 13:40:01 +02:00
rlar 1afa04b2d1 inpcom.c, insert_new_line(), inline xx_new_line() 2017-06-25 13:39:56 +02:00
rlar 5c7c278c3d inpcom.c, inp_fix_subckt(), #4/4, drop redundant initialisations 2017-06-25 13:39:48 +02:00
rlar c3e2c920ef inpcom.c, inp_fix_subckt(), #3/4, drop 'last_param_card' 2017-06-25 13:39:41 +02:00
rlar 2aafc50608 inpcom.c, inp_fix_subckt(), #2/4, use insert_new_line() 2017-06-25 13:39:34 +02:00
rlar dda35ef2a5 inpcom.c, inp_fix_subckt(), #1/4, rewrite 'append' 2017-06-25 13:39:27 +02:00
rlar e75f48d91f inpcom.c, insert_new_line(), allow NULL head 2017-06-25 13:00:39 +02:00
rlar 5ff5839296 inpcom.c, inp_stitch_continuation_lines(), rewrite for the following commit 2017-06-25 12:58:50 +02:00
rlar 420c023f56 inpcom.c, introduce insert_new_line()
use it to replace this pattern
  foo = bar->li_next = xx_new_line(bar->li_next, ...);
with
  foo = insert_newline(bar, ...);
2017-06-25 12:57:18 +02:00
rlar 38183b6167 inpcom.c, expand_section_ref(), #7/7, cleanup 2017-06-25 12:10:01 +02:00
rlar dd155dd83e inpcom.c, expand_section_ref(), #6/7, drop 'rest' 2017-06-25 12:09:21 +02:00
rlar 0f8fb4cf51 inpcom.c, expand_section_ref(), #5/7, drop 'newl' 2017-06-25 12:04:16 +02:00
rlar a77db80a85 inpcom.c, expand_section_ref(), #4/7, drop 'cend', use 'c' instead 2017-06-25 12:03:39 +02:00
rlar 0c94a651ee inpcom.c, expand_section_ref(), #3/7, simplify 2017-06-25 12:02:26 +02:00
rlar 26d878748d inpcom.c, expand_section_ref(), #2/7, t == section_def ==> cend == c 2017-06-25 12:01:34 +02:00
rlar 7f2cf192b6 inpcom.c, expand_section_ref(), #1/7, cend != NULL === t != section_def 2017-06-25 12:00:07 +02:00
rlar a51c1aba2c inpcom.c, inp_read(), #2/2, rewrite xx_new_line() insertion
using the fact
  end->li_next === NULL
2017-06-24 22:03:03 +02:00
rlar 5c3dac41d9 inpcom.c, inp_read(), #1/2, rewrite 'append' to 'end' 2017-06-24 22:01:03 +02:00
rlar ed39305da0 inpcom.c, inp_add_series_resistor(), simplify xx_new_line() insertion 2017-06-24 20:30:04 +02:00
rlar 9eddd1d80f inpcom.c, inp_add_control_section(), #2/2, rewrite xx_new_line() insertion 2017-06-24 20:15:02 +02:00
rlar 4ad53f0de8 inpcom.c, inp_add_control_section(), #1/2, emphasise two assertions 2017-06-24 20:12:55 +02:00
rlar 4ff9c0c166 inpcom.c, inp_chk_for_multi_in_vcvs(), #6/6, drop 'model_card' 2017-06-24 19:44:35 +02:00
rlar d773b73f76 inpcom.c, inp_chk_for_multi_in_vcvs(), #5/6, drop 'next_card', deploy its value temporarily in the new line's li_next slot 2017-06-24 19:44:11 +02:00
rlar 3b55d2af40 inpcom.c, inp_chk_for_multi_in_vcvs(), #4/6, drop 'a_card', reuse the unused 'c' instead 2017-06-24 19:43:34 +02:00
rlar 634b012492 inpcom.c, inp_chk_for_multi_in_vcvs(), #3/6, xx_new_line() shall fill the li_next slot 2017-06-24 19:40:48 +02:00
rlar e9e9e5d55e inpcom.c, inp_chk_for_multi_in_vcvs(), #2/6, move code downwards 2017-06-24 19:40:38 +02:00
rlar c83b0544de inpcom.c, inp_chk_for_multi_in_vcvs(), #1/6, skip lines 2017-06-24 19:40:27 +02:00
rlar e81560de1a inpcom.c, drop the local 'new_line' variable 2017-06-24 19:11:22 +02:00
rlar b21b4170b2 inpcom.c, simplify the insertion of new lines/decks quite a bit 2017-06-24 19:11:21 +02:00
rlar 2972953336 inpcom.c, reorder initialisation
initialise param_beg and param_end before they will be used,
  instead of "afterwards" in preparation for the next following usage.
and move the "comment out" up some lines, think that way:
  comment out original line, append new line, ...
2017-06-24 18:16:48 +02:00
h_vogt 5d82d1b04a misccoms.c, com_quit(), don't free memory, unless shared ngspice
Traversing all linked memory structures to free their memory
  can be a somewhat lengthy business, especially in xspice,
  which is not worth the effort when we simply want to exit()
Long delays have been reported in certain cases.

For developers and for the usage of such tools as valgrind,
  we still free all the memory if 'set ngdebug' is given.
2017-06-24 17:55:26 +02:00
rlar b2621174d3 inpgmod.c, plug a memory hole
Reported and fixed by Marek Bielik in message:
  Subject: [Ngspice-devel] Memory leaks fix
  Date: Tue, 18 Apr 2017 16:16:21 +0000
2017-06-24 17:49:07 +02:00
h_vogt 7489a37973 inpgval.c, inpdpar.c, beautify the code 2017-06-06 17:05:22 +02:00
h_vogt fa6e21dd3a inpgval.c, INPgetValue(), use INPgetNetTok() instead of INPgetTok()
To fix a bug reported by Clyde Shappee in
  Subject: Problem with pole zero analysis and net names
  https://sourceforge.net/p/ngspice/discussion/127605/thread/14338e7e/

When using node names with a leading slash '/'
  on the "pz" analysis command line.
2017-06-06 16:51:32 +02:00
rlar a6a3d884ee fix commit "mifsetup.c, MIFunsetup(), #1/3 delete broken code"
which silently dropped the
  here->initialized = MIF_FALSE
aspect of the MIFunsetup() function

which caused segfault in testcase
  examples/memristor/memristor_x.sp
2017-06-06 16:42:32 +02:00
Tim Edwards fd79197fc0 xspice/icm/digital, introduce d_genlut
a digital n-input x m-output look-up table gate
2017-05-01 22:11:24 +02:00
Tim Edwards 8ae3b84c7c xspice/icm/digital, introduce d_lut
a digital n-input look-up table gate
2017-05-01 22:11:04 +02:00
h_vogt 37fe5308d3 xspice/icm/table, introduce table2d/table3d
which allows to model devices based upon linear interpolation
2017-04-30 17:00:15 +02:00
rlar a7cc37b2e2 ifparm, fix numdev too 2017-04-19 19:18:13 +02:00
h_vogt cc8fb86411 diotemp.c, set lower limit of saturation current 'is' to epsmin 2017-04-19 18:57:20 +02:00
h_vogt c82ee9d949 introduce option "epsmin"
To define a minimum argument for some log() function invocations.
(most notably for the diode saturation current 'is')
2017-04-19 18:56:00 +02:00
dwarning 78cc48575b prevent warnings for double declared variables 2017-04-17 20:53:30 +02:00
rlar 2f329bd8b4 N_MXVLNTH, drop noise variable name limitation 2017-04-15 17:21:24 +02:00
h_vogt 306ada7dd0 inpcom.c, get_model_type(), use gettok_noparens() to extract model type
Takes care of model descriptions in parentheses like
  d(...)
2017-04-12 22:00:07 +02:00
h_vogt 1ffb957e6c inpcom.c, inp_fix_subckt_multiplier(), cleanup, using strchr() 2017-04-12 21:48:13 +02:00
rlar 2f1219811e src/spicelib/devices/*/*set.c, XXXunsetup(), reset local node variables unconditionally
and use a more robust test for local node numbers.

That is, transform this pattern :
  if (here->Node && ...) {
     CKTdltNNum(ckt, here->Node);
     here->Node = 0;
  }
into this :
  if (here->Node > 0 && ...)
     CKTdltNNum(ckt, here->Node);
  here->Node = 0;

The change of "!= 0" ==> "> 0" accounts for rare cases where "Node"
   might have been set to -1, (meaning "unconnected")
The unconditional execution of the zero assignment is for those cases
  where "Node" might have been assigned to some external or other local Node.
If so, the variable would not be set to zero, confusing the "guarding" if's
  in the corresponding XXXsetup() routine.

The Pattern to follow is:
  1) unset and delete *all* local Nodes in XXXunsetup()
  2) allocate all of them again in a re-invocation of XXXsetup(),
       exactly the same way as in the very first invocation.
2017-04-12 21:34:05 +02:00
rlar 00c743c37d src/spicelib/devices/*/*def*.h, declare external node variables const
for almost all other external nodes (notable exception "txl")
src/spicelib/devices/*/*def*.h, declare external node variables const

1) The compiler shall emit an error message if we still mess around
     with external node numbers.
2) To mark which elements of the instance struct are meant to be set
     externally when parsing the netlist

These "external" node variables are exclusively set via the
  overlay struct GENinstance, member GENnode[]

We shall not mess around with these "external" node variables
  because it would get rather difficult to avoid bugs considering
  re-invocation of the XXXsetup() routine.
This gets interesting for devices with optional ports,
  which get copied around depending on the amount of connected ports.
2017-04-12 21:34:02 +02:00
rlar 0e9576cb34 src/spicelib/devices/*/*set.c, missing CKTdltNNum() invocations, complex cases
All locally created nodes (CKTmk..() invocations in XXXsetup())
  must be deleted in XXXunsetup()

Otherwise CKTmk..() invocations during a following CKTsetup()
  will re-emit still used node numbers,
  thus accidentally shorting nodes.

This patch fixes the complex cases,
  which are external node variables (ports of the instance),
  which might be moved over to other external node variables
  to cope with optional port connections.
This is fixed by copying the node numbers to local shadow variables
  to avoid messing with the external nodes.
Otherwise a following CKTsetup() might again meddle with the external
  node variables, at least causing considerable confusion, probably causing
  hard to find bugs.
2017-04-12 21:34:00 +02:00
rlar c0921250b7 src/spicelib/devices/*/*set.c, missing CKTdltNNum() invocations, medium cases
All locally created nodes (CKTmk..() invocations in XXXsetup())
  must be deleted in XXXunsetup()

Otherwise CKTmk..() invocations during a following CKTsetup()
  will re-emit still used node numbers,
  thus accidentally shorting nodes.

This patch fixes a little bit more complex cases,
  which are local node variables which will start with value 0
  and eventually be set with the result of a CKTmk..() invocations,
  but might as well receive a node number from another node variable.
Here CKTdltNNum() must not be invoked if the node number is merely
  a copy from another node variable.
2017-04-12 21:33:59 +02:00
rlar 1fd14fa2ee src/spicelib/devices/*/*set.c, missing CKTdltNNum() invocations, simple cases
All locally created nodes (CKTmk..() invocations in XXXsetup())
  must be deleted in XXXunsetup()

Otherwise CKTmk..() invocations during a following CKTsetup()
  will re-emit still used node numbers,
  thus accidentally shorting nodes.

This patch fixes the simple cases,
  which are local node variables which will start with value 0
  and eventually be set with the result of a CKTmk..() invocation.
More complex cases evolve, if such a local variable might receive
  a node number which origins from another node, or the netlist itself.
2017-04-12 21:33:58 +02:00
rlar 0c86adf9af src/spicelib/devices/*/*set.c, XXXunsetup(), sort CKTdltNNum() invocations
Invoke CKTdltNNum() in reverse order of local node creation in XXXsetup()

This fixes a bug at least in mesa and hfet1,
  where already destroyed node variables have still been accessed
  in the guarding 'if' of a later CKTdltNNum() stanza.
Invoking them in revers order easily prevents such bugs,
  and improves readability.
2017-04-12 21:33:50 +02:00
rlar 7afb798a6f check for illegal DEVsetup() DEVunsetup() patterns.
Consider the following silent contracts:
1)
 CKTsetup() invocations must be separated by a CKTunsetup() invocation
 But CKTsetup() has an internal flag,
   which will prevent re-invocation of DEVsetup()
 But DEVsetup() will be called during sensitivity analysis,
   bypassing this precaution. It is fatal if this will
   cause another node allocation (CKTmk..()).
   This commit tries to detect such cases.
   (Note: many DEVsetup routines (all ?) have their CKTmk..() invocations
      guarded to avoid reallocation of local nodes,
      see commit f7f454c0a1
        bug fix, fix the guard for device generated internal nodes (via CKTmkVolt())
   )
   FIXME:
     DEVsetup() is seriously obfuscated by these guards.
     If would be far better, if the sensitivity analysis
       wouldn't sidestep into DEVsetup()
     consider a device local variant of the CKTisSetup flag
2)
 DEVunsetup() must delete all, each and every,
   local allocated node in DEVsetup()
 Otherwise CKTmk..() invocations in a following CKTsetup() will
   return duplicate node numbers, effectively shorting device nodes.
 This commit tries to detect incomplete CKTdltNNum() invocations.
3)
  DEVunsetup() must not delete a netlist node.
  This can easily happen in those devices which have optional ports,
    which have code in DEVsetup() which copies node numbers to
    local node variables.
  This commit tries to detect such errors.
2017-04-12 21:32:51 +02:00
h_vogt 69b235531e sharedspice.c, introduce csh variable "sharedmode"
to reflect whether running as shared library
2017-04-12 21:22:22 +02:00
h_vogt 0bf381e01d cpitf.c, for Windows, introduce csh variable "win_console"
to reflect whether this .exe is a "console" build
2017-04-12 21:11:13 +02:00
h_vogt 670880086f cpitf.c, MS Visual Studio, introduce csh variable "pg_config"
reflecting .exe compilation for
  32/64 bit
  with/without NGDEBUG
2017-04-12 21:01:57 +02:00
h_vogt d7a1899210 runcoms.c, rawfile.c, include filename in the 'ASCII/binary raw file' printout 2017-04-12 20:45:51 +02:00
rlar 926ba4baaf xspice/icm/analog/file_source/cfunc.mod, use CALLBACK
to free() locally allocated memory and fclose() a local filestream
2017-04-12 20:14:47 +02:00
rlar 58874cc65e xspice, implement "CALLBACK"
Allow to register a callback function in the cfunc.mod files,
  which will be invoked in MIFdestroy.
Usefull to "free" memory which has been allocated locally in a cfunc.mod file.
2017-04-12 20:02:35 +02:00
mhx 5f0f54761a xspice, analog/file_source, bug fix
The source code did not consider the possibility
  of more than one "tran" analysis invocations.

see "Bewildering problem with filesource block while sweeping"
https://sourceforge.net/p/ngspice/discussion/133842/thread/52949e23/
2017-04-12 20:01:14 +02:00
rlar 4872580221 mifsetup.c, MIFunsetup(), #3/3 now invoke CKTdltNNum() 2017-04-12 18:41:07 +02:00
rlar 9154f83c37 mifsetup.c, MIFunsetup(), #2/3 copy paste from MIFsetup() 2017-04-12 18:38:26 +02:00
rlar c68a0313bd mifsetup.c, MIFunsetup(), #1/3 delete broken code 2017-04-12 18:38:25 +02:00
dwarning 48262e5c0a extend safe operation area check (SOA) to polarity check for mosfets by additional parameters 2017-04-11 21:31:54 +02:00
rlar 46ab21dca9 inpcom.c, is_a_modelname(), don't accept "1E2" 2017-04-09 20:19:35 +02:00
h_vogt 847a09fd37 inpcom.c, get_number_terminals(), ignore "save" and "print" when CIDER 2017-04-09 18:33:12 +02:00
h_vogt e5d70d0821 gnuplot.c, bug fix, allow gnuplot with MINGW 2017-04-09 17:53:40 +02:00
rlar ccfcc056ad inpcom.c, bug fix, allow leading '_' in parameter identifiers 2017-04-09 15:38:15 +02:00
rlar c6896cf338 accept .para shortcut for .param 2017-04-09 15:37:46 +02:00
rlar 900bed550d string.c, #6/6, use skip_ws() and skip_back_ws() 2017-04-09 15:35:44 +02:00
rlar 0da47c644b string.c, #5/6, cleanup 2017-04-09 15:35:41 +02:00
rlar 5b23b54769 string.c, #4/6, cleanup token fetching 2017-04-09 15:35:38 +02:00
rlar c6a3438408 string.c, #3/6, cleanup 'return' 2017-04-09 15:35:35 +02:00
rlar ed13e8a15a string.c, #2/7, drop 'register' 2017-04-09 15:35:32 +02:00
rlar d48bec757c string.c, #1/6, whitespace 2017-04-09 15:35:29 +02:00
rlar fb1c6fc123 ifparm, #16/16, isrc.c, non grouped alias entry, change "c" from IP to IOPPR 2017-04-09 15:29:44 +02:00
rlar 762314b893 ifparm, #15/16, ind.c, missing IF_AC|IF_PRINCIPAL in alias entry, use IOPAPR 2017-04-09 15:29:43 +02:00
rlar d32a32bdc8 ifparm, #14/16, res.c, missing IF_ORQUERY|IF_REDUNDANT, introduce IOPQOR 2017-04-09 15:29:42 +02:00
rlar cefb65507f ifparm, #13/16, res.c, missing IF_SETQUERY in an alias entry, introduce IOPQR 2017-04-09 15:29:41 +02:00
rlar 8d3acddc7b ifparm, #12/16, res.c, missing IF_PRINCIPAL in an alias entry, introduce IOPPR 2017-04-09 15:29:40 +02:00
rlar 614eebe944 ifparm, #11/16, res.c, missing IF_CHKQUERY for some alias entries, introduce IOPZR 2017-04-09 15:29:40 +02:00
rlar ff00855397 ifparm, #10/16, jfet2.c, missing IF_REDUNDANT for some aliases, introduce PARAMR 2017-04-09 15:29:39 +02:00
rlar cee466b35e ifparm, #9/16, mes.c, "m" is an alias of "area", use IOPUR 2017-04-09 15:29:38 +02:00
rlar f0e2b43940 ifparm, #8/16, excess IF_REDUNDANT for some aliases, use IOP 2017-04-09 15:29:37 +02:00
rlar 102a6b7c77 ifparm, #7/16, missing IF_UNINTERESTING for some aliases, introduce IOPUR 2017-04-09 15:29:36 +02:00
rlar 4fc33eb656 ifparm, #6/16, missing IF_NONSENSE for some aliases, introduce IOPXR 2017-04-09 15:29:35 +02:00
rlar b56c2a2504 ifparm, #5/16, missing IF_AC for some aliases, introduce IOPAR 2017-04-09 15:29:34 +02:00
rlar eac26d741c ifparm, #4/16, missing IF_REDUNDANT for some aliases, introduce IOPAPR 2017-04-09 15:29:33 +02:00
rlar 445860f79a ifparm, #3/16, missing IF_REDUNDANT for some aliases, use IOPR 2017-04-09 15:29:32 +02:00
dwarning 115b52a899 ifparm, #2/16, missing IF_REDUNDANT, duplicates and descriptions 2017-04-09 15:29:30 +02:00
dwarning e0fcdc7457 ifparm, #1/16, missing IF_REDUNDANT for vth0/vtho in bsim models 2017-04-09 15:23:15 +02:00
rlar 1e6b809af8 introduce command "check_ifparm" to check consistency of the device IFparm sets
For developing purpose only, and bound to HAVE_TSEARCH, HAVE_TDESTROY

IFparm descriptors must obey certain contracts,
  1) aliases must be grouped together with their associated main descriptor,
       and all must have flag IF_REDUNDANT set
  2) there shall be no duplicated .id fields except for aliases.
  3) aliased entries shall have consistent .dataType fields

check_ifparm will traverse all IFparm sets and report violations
2017-04-09 14:40:51 +02:00
h_vogt cf9dbff890 inpcom.c, cleanup, use strchr() 2017-04-09 14:14:45 +02:00
rlar 2df8f433f8 inp.c, inp_parse_temper(), rewrite, using search_idenifier and find_assignment
try to make it more robust with regard to
  '!=' '<=' '=='         don't misinterpret as '='
  "atemperaticvariable"  don't misinterpret as 'temper'
  multiple temper in one expression
2017-04-09 14:14:36 +02:00
rlar 511389ad10 inpcom.c, introduce find_back_assignment() 2017-04-09 14:14:06 +02:00
rlar 5238f0b1cb inpcom.c, find_assignment(), const'ify and declare extern 2017-04-09 14:12:22 +02:00
rlar 4c44027cd2 inp.c, inp_parse_temper(), cleanup 2017-04-09 14:12:13 +02:00
rlar 2809ccaa13 shrink scope of expr_w_temper 2017-04-09 14:06:27 +02:00
rlar 872ceeedc7 inp_temper_compat(), return expr_w_temper 2017-04-09 14:06:15 +02:00
rlar 2c35eebb0b invoke in_parse_temper_trees() and inp_evaluate_temper() unconditionally 2017-04-09 14:06:02 +02:00
rlar e35429a222 inpcom.c, introduce rem_tlist() 2017-04-09 14:03:11 +02:00
rlar c600312d01 deploy devtlist/modtlist in struct circ 2017-04-09 13:59:53 +02:00
rlar 2a50316304 inp_parse_temper(), add modtlist_p/devtlist_p arguments 2017-04-09 13:59:46 +02:00
rlar f78d8e21f0 inp_parse_temper_trees(), add struct circ argument 2017-04-09 13:59:38 +02:00
rlar f2f2b3b09a inp_evaluate_temper(), add struct circ argument 2017-04-09 13:49:43 +02:00
rlar fa13e422cd inpcom.c, bug fix, always reset expr_w_temper 2017-04-09 13:49:32 +02:00
rlar 5513d8bdf3 inpcom.c, bug fix, expr_w_temper missing reset 2017-04-09 13:49:22 +02:00
rlar c920946c73 inp.c, bug fix, need to reset modtlist/devtlist unconditionally 2017-04-09 13:49:13 +02:00
rlar 12de713ff5 inp.c, bug fix, commit "allow 'temper' keyword in .param, .model and device instance lines ..."
don't overwrite struct pt_temper.expression,
  to allow free'ing this string.
2017-04-09 13:49:05 +02:00
h_vogt 648de2a001 cktdojob.c, add missing evaluation of TEMPER after new temperature is set
This is relevant for model and device parameters containing TEMPER.
2017-04-09 13:48:55 +02:00
h_vogt 67e06bb4ac winmain.c, bug fix, #315 ngspice under windows 10 shows exception on quit
https://sourceforge.net/p/ngspice/bugs/315/

longjmp() creates segfault under Windows 10 (VS and MINGW)
somewhere when MainWindowProc() is processing the WM_CLOSE message.

Instead of raising SIGINT, directly call cp_doquit().
return 0 if "askquit" is set and the user declines to "quit".
This continues the simulation, if still active.
2017-04-09 12:46:38 +02:00
dwarning 33c7740884 bsim4 model update according berkeley release - disclaimer change 2017-03-31 15:01:30 +02:00
dwarning 3f0096fd46 bsim4 model update according berkeley release - code change 2017-03-31 14:48:14 +02:00
rlar ab409ad62e protect vec_free() and free_pnode() macro for use in non braced blocks
if ()
  vec_free()
2017-03-25 19:54:40 +01:00
rlar c7811a76df ngspice/fteext.h, whitespace and spelling 2017-03-25 19:41:32 +01:00
rlar cc15853b4f ngspice/ftedefs.h, whitespace and spelling 2017-03-25 19:11:33 +01:00