ngspice/visualc/spinit_dbg_src

33 lines
611 B
Plaintext
Raw Normal View History

Merge branch 'pre-master' of ssh://git.code.sf.net/p/ngspice/ngspice into beta_jdm Fixed some uses of const Changed dstring to use allocations that are serialized by mutex when needed but can fail without terminating the program. Also changed calls to free() to use a replacement (txfree()) that will serialize when necessary. Removed flag fields from Model_Info_t and Node_Info_t since they were no longer required. Reverted OK back to 0 in cmpp. There were issues with OK conflicting with another macro definition of OK due to a header inclusion. Added functions for writing new code model and UDN information. Added function output_paths_from_lst_file() to extract paths in more general lst format. Used new function fbget() in cmpp to get data from lst file. Made reomval of trailing slash in cmpp an inline function for modularity. Removed restrictions on line length and related items in cmpp by dynamically resizizng as required. Reduced the number of allocation calls when storing model info and user-defined type information in cmpp while reading lst files by doubling the size when resizing rather than increasing the size by 1. Also added checks for failure that were not present. These things were also done for user-defined types, which are processed in a similar way. Fixed potential buffer overrun in cmpp function read_model_names() while building the path. Also the path name is built more efficiently by maintining the current location in the output string instead of repeatedly finding it via strcat(). These things were also done for the corresponding function for user-defined nodes. To support versioning, a group of "filebuf" functions were written to get the path names and version numbers from a .lst file having a more flexible format. Added checks for failure in cmpp function read_model_names() while setting the name of the model and the function. Developed a more modular and efficient method of testing for duplicate SPICE models, etc. in cmpp. Instead of nested for loops, the items are compared in a sorted order, so that a single pass needs to be done. This method also avoids the need of several flag variables that are used to check if a duplicate is being found multiple times. A related functions test_for_duplicates() was written to perform a generic test of any of the uniquness conditions checked, along with a sort function and functions to report errors. In cmpp, function fopen_cmpp was changed into a function that generates the file name but does not open the file (gen_filename()) followed by a standard fopen. This change prevented error messages from fopen_cmpp() from causing an access violation of the name of the file was not allocated properly. It also separtes the input file name from the output file name, so it is clearer what is being freed when the output file name is freed at the end of the function. Added checks for failure of fclose() in several places. Often a small file is not written at all on disk until fclose is called. Added a function to write version 2 code model info into cminfo2.h. A similar function was written for udninfo.h. Wrote functions to free Model_Info_t and Node_Info_t structures. Added checks to all output file operations to ensure that the files that are generated are correct. This change involved adding tests to the individual functions outputting data and adding return codes and checks of them in functions doing output. Combined several small file outputs into larger ones while adjusting the format of the text being ouptut to keep the clarity of what is being written while reducing the number of function calls. In functions like cmpp function dta_type_to_str(), strings were returned directly instead of making a copy that was not necessary. This change eliminated the copy, made the functions thread safe, and eliminated allocations. The allocations were not checked for failure, so the change also prevented problems associated with failures of these allocations. In value_to_string(), the elimination of the allocation and copy were not possible due to retain the value of the string, but the allocation was checked for failure where it was not and the resize was also checked. In integer_to_str(), a buffer size was used that was a function of the size of the data to fill it rather than an unrelated size that was most likely too large. Also due to the reduced size, a stack-based buffer was used. Fixed a bug in table-generator-b4-2d.sp where the plot names are incorrect if the script is called from a running instance of ngspice that has already created some plot names that would cause conflicts. Also commented this issue. Added functions to the structure communicating between ngspice and code models to support required memory functions so that the code models, which are running in the same address space, will have serialized allocations when that is required. Reorganized memory allocations to allow for "raw" allocations that are serialized when required. Essentially the allocation functions were decomposed into part that does not require serialization and part that does. Aside from exposing the "raw" allocations, this change made the functions clearer and fixed an issue where free was being called without mutex protection when it would be required. Also, tstrdup() and tstrdup_raw() were written so that serialization would be available in strdup(). If the other allocation functions require serialization, then strdup() does also. There were some issues fixed with the "garbage collect" versions of the allocation functions. moved src/misc/alloc.h to src/include/ngspice/alloc.h. This change was done because one of the builds (only MinGW) was having problems finding it in one case. The others were searching the include path while MinGW was using the path of the including file as its base. While that issue may have been corrected, this change was beneficial because there were many files including alloc.h through a long path of ../.. from include. As part of this change, those includes were fixed also. Loading code models and user-defined types was enhanced to handle versioning. Additionally, the copying of error messages along with a potential buffer overrun was completely eliminated by using the string directly. Following the use, a macro FEEE_DLERR_MSG(msg) was added to free the string in Windows. In other OS where dlerror() does not require its string to be freed, the macro expands to nothing. In cm_analog_alloc() the number of doubles required was corrected. Fixed Maiefile.am to include new files. Fixed the macro definition of strdup in Windows so that it will not confilct with the definition provided when CRT memory debugging is used. Updated usage message for cmpp to provide information about the -p flag. Added diagnostic messages when running cmpp if the macro DEBUG_CMPP is enabled. These were entirely removed from the mainline code flow except for a single macro PRINT_CMPP_INFO(argc, argv) Changed free functions in rm_ifs_table from txfree() to a regular free() since cmpp does not ever require mutex serialization. Also, its allocations are done using standard malloc(), calloc(), and realloc(), so free() is more appropriate. Modified change_extension() so that it will append a dot plus the new extension in the case where the original file does not have an extension. This case is not used in cmpp, but it seems more correct since the new extension being supplied does not come with a leading dot. Added check in call to change_extension() for failure. Added function vprint_error() to cmpp/util.c and defined print_eror in terms of vprint_error(). The intent was to be able to call vprint_error() directly. Subsequent changes to the code removed the call to vprint_error(), but the function was left since it is a useful utility function. Modified src/xspice/icm/GNUmakefile.in to use cmpp -p to obtain a path list. Converted all code models supplied with ngspice to 1) Use the "talloc" functions so that their allocations will be serialized when necesary 2) Check for allocation failure in all cases 3) Free resources on exit 4) Supply version information in the corresponding .lst file Modified icm/dlmain.c to include version 2 information. visualc/make-install-vngspiced.bat was changed in two ways. First sime actions were preceeded by checks to avoid error messages if they were unconditionally performed. Seond, code models were copied to a second location besides the destination used by a "production" ngspice. This second location along with an spinit file to use them allows debugging of multiple versions of ngspice concurrently. visualc/xspice/aux-cfunc.bat was modified to print additional diagnostic messages during a build, much like the compiler outputs file names. Also, cmpp -p was made the method to get the list of directories. Finally, the actions of visualc/xspice/aux-udnfunc.bat were added to aux-cfunc.bat since that file was already doing two of the three actions, and calling aux-udnfunc.bat alone or in the wrong order would cause an error. aux-udnfunc.bat was commented out and probably should be removed at some later time.
2020-01-29 05:56:07 +01:00
* Standard ngspice init file
alias exit quit
alias acct rusage all
set x11lineararcs
*set rndseed=12
** ascii rawfile **
set filetype=ascii
** frontend debug output **
*set ngdebug
** asking after quit **
*set askquit
** set the number of threads in openmp
** default (if compiled with --enable-openmp) is: 2
set num_threads=4
set interactive
set stepsizelimit
strcmp __flag $program "ngspice"
if $__flag = 0
* Load the codemodels
echo "Loading code models"
codemodel spice2poly.cm
codemodel analog.cm
codemodel digital.cm
codemodel xtradev.cm
codemodel xtraevt.cm
codemodel table.cm
end
unset __flag