1 #include <../../nrnconf.h>
10 #include "utils/logger.hpp"
14 #include <openssl/sha.h>
21 #define prcod(c1, c2) else if (p->pf == c1) Printf("%p %p %s", fmt::ptr(p), fmt::ptr(p->pf), c2)
134 size_t offset = (size_t)
p->in;
138 offset = (size_t) (
p->in) - (size_t)
p;
139 if (offset > (
size_t)
hoc_prog - (size_t)
p &&
140 offset < (
size_t) (&
hoc_prog[2000]) - (
size_t)
p)
141 Printf(
"relative %ld\n",
p->in -
p);
142 else if (
p->sym->name != (
char*) 0) {
143 if (
p->sym->name[0] ==
'\0') {
144 Printf(
"constant or string pointer\n");
149 Printf(
"symbol without name\n");
160 static std::vector<std::vector<std::string>> digest;
161 static std::vector<size_t> digest_cnt;
162 static int nrn_digest_print_item_ = -1;
163 static int nrn_digest_print_tid_ = 0;
164 static bool nrn_digest_abort_ =
false;
169 const char* fname =
gargstr(1);
170 FILE* f = fopen(fname,
"w");
176 for (
auto& d: digest) {
177 fprintf(f,
"tid=%d size=%zd\n", tid, digest[tid].size());
179 fprintf(f,
"%s\n",
s.c_str());
187 nrn_digest_print_item_ = -1;
188 nrn_digest_print_tid_ = 0;
191 nrn_digest_print_item_ = int(
chkarg(2, 0., 1e9));
193 nrn_digest_abort_ = (
ifarg(3) && strcmp(
gargstr(3),
"abort") == 0);
195 size_t size = digest.size() ? digest[0].size() : 0;
204 void nrn_digest_dbl_array(
const char* msg,
int tid,
double t,
double* array,
size_t sz) {
208 unsigned char md[SHA_DIGEST_LENGTH];
209 size_t n = sz *
sizeof(double);
210 unsigned char* d = (
unsigned char*) array;
215 int ix = int(digest_cnt[tid]);
217 sprintf(
buf,
" %d %d %.17g ", tid, ix,
t);
220 for (
int i = 0;
i < 8; ++
i) {
221 sprintf(
buf,
"%02x", (
int) md[
i]);
225 digest[tid].push_back(
s);
227 if (nrn_digest_print_item_ == ix && nrn_digest_print_tid_ == tid) {
229 if (nrn_digest_abort_) {
232 for (
size_t i = 0;
i < sz; ++
i) {
233 printf(
"Z %zd %.20g\n",
i, array[
i]);
void sec_access_pop(void)
void rangevarevalpointer()
void range_interpolate(void)
void forall_section(void)
void connectsection(void)
void range_interpolate_single(void)
void sec_access_push(void)
void sec_access_object(void)
void hoc_delete_symbol(void)
void hoc_argrefasgn(void)
void hoc_object_asgn(void)
void hoc_asgn_obj_to_str(void)
void hoc_constobject(void)
void hoc_object_eval(void)
void hoc_objvardecl(void)
void hoc_ob_pointer(void)
void connect_obsec_syntax(void)
void hoc_push_current_object(void)
void hoc_known_type(void)
double chkarg(int, double low, double high)
void hoc_execerr_ext(const char *fmt,...)
printf style specification of hoc_execerror message.
int hoc_is_str_arg(int narg)
void simpleconnectsection()
int const size_t const size_t n
void hoc_object_component()
void connect_point_process_pointer(void)
void forall_sectionlist()
int Printf(const char *fmt, Args... args)