117 (void) fprintf(
STDERR,
" the sampling frequency <fs> or the sampling period <ts>\n");
136 (void) fprintf(
STDERR,
" variable <%s> has no definition\n",
Var_List[i].name1);
141 (void) fprintf(
STDERR,
" variable <%s> cannot be defined here as a string,",
Var_List[i].name1);
142 (void) fprintf(
STDERR,
" as it is declared as digital\n");
147 (void) fprintf(
STDERR,
" variable <%s> cannot be defined here as a string,",
Var_List[i].name1);
148 (void) fprintf(
STDERR,
" as it is declared as analog\n");
162 char *str1 = (
char*) NULL;
163 char *str2 = (
char*) NULL;
169 (void) fprintf(
STDERR,
"\n\n");
173 (void) fprintf(
STDERR,
"\n\n");
177 (void) fprintf(
STDOUT,
"/* *** Ad Hoc Cycle-Based ANSI-C Simulator");
179 (void) fprintf(
STDOUT,
"/* *** Author and support: Yves Leduc %66s *** */\n",
" ");
180 (void) fprintf(
STDOUT,
"/* *** Email: yves.leduc.be@gmail.com %78s *** */\n\n",
" ");
182 (void) fprintf(
STDOUT,
"/* *** %115s *** */\n",
" ");
183 (void) fprintf(
STDOUT,
"/* *** %115s *** */\n",
" ");
189 n = (long) strlen(str2);
190 (void) fprintf(
STDOUT,
"/* *** %s %s *** */\n", str2,
multiple(
' ', 115 - n));
192 (void) fprintf(
STDOUT,
"/* *** %115s *** */\n",
" ");
193 (void) fprintf(
STDOUT,
"/* *** %115s *** */\n\n",
" ");
196 if (
'X' == tok1[0]) {
200 (void) fprintf(
STDOUT,
"/* *** This file has been produced by a BETA RELEASE of version %-56s *** */\n", tok1);
201 (void) fprintf(
STDOUT,
"/* *** Use this version for evaluation only. %-56s *** */\n",
" ");
202 (void) fprintf(
STDOUT,
"/* *** Switch to next standard release as soon as possible. %-56s *** */\n",
" ");
207 (void) fprintf(
STDOUT,
"/* *** FAULT MODELLING. This file does not describe the circuit under %48s *** */\n",
" ");
209 (void) fprintf(
STDOUT,
"/* *** test but a variant to simulate the behavior with a stuck node: %48s *** */\n",
" ");
211 (void) fprintf(
STDOUT,
"/* *** test but a variant to simulate the behavior with %2ld stuck nodes: %50s *** */\n",
Num_Stucks,
" ");
219 (void) fprintf(
STDERR,
"\n ****\n");
220 (void) fprintf(
STDERR,
" ****\n");
221 (void) fprintf(
STDERR,
" ****\n");
222 (void) fprintf(
STDERR,
" **** Building a Standalone Simulator to be run on %5s OS\n",
MACHINE);
223 (void) fprintf(
STDERR,
" ****\n");
224 (void) fprintf(
STDERR,
" ****\n");
225 (void) fprintf(
STDERR,
" ****\n\n");
227 (void) fprintf(
STDOUT,
"/* *** File is built to produce a STANDALONE EXECUTABLE running on %5s OS. %49s */\n",
MACHINE,
" ");
229 (void) fprintf(
STDOUT,
"/* *** No parameter %-103s */\n",
" ");
239 (void) fprintf(
STDOUT,
"/* *** %50s *** */\n",
" ");
240 (void) fprintf(
STDOUT,
"/* *** THIS PLATFORM DOES -NOT- SUPPORT SIGN EXTENSION ON RIGHT SHIFTS!%50s *** */\n",
" ");
241 (void) fprintf(
STDOUT,
"/* *** %50s *** */\n",
" ");
246 (void) fprintf(
STDOUT,
"/* MAIN SIMULATION LOOP IS EMPTY AS TERMINATE CONDITION IS SET TO 'true' %54s */\n",
" ");
251 if (38L < (
LENGTH(buf))) {
252 (void) fprintf(
STDOUT,
"/* Main NAPA netlist file name : %-91s */\n",
" ");
253 (void) fprintf(
STDOUT,
"/* -> %-117s */\n", buf);
255 (void) fprintf(
STDOUT,
"/* Main NAPA netlist file name : %-91s */\n", buf);
258 (void) fprintf(
STDOUT,
"/* This ANSI-C [c2x] code has been produced by the NAPA compiler from these");
265 (void) fprintf(
STDOUT,
"\n/* (main) -> %-112s */\n", buf);
269 (void) fprintf(
STDOUT,
"/* -> %-112s */\n", buf);
277 (void) fprintf(
STDOUT,
"\n/* These libraries have been REGISTERED by the user" );
278 (void) fprintf(
STDOUT,
" in the NAPA compiler line command: %40s */\n",
" ");
279 if (42L < (
LENGTH(buf))) {
280 (void) fprintf(
STDOUT,
"\n/* Generic headers: %100s */\n",
" ");
281 (void) fprintf(
STDOUT,
"/* -> %-112s */\n", buf);
283 (void) fprintf(
STDOUT,
"\n/* -> Generic headers : %-88s */\n", buf);
286 if (42L < (
LENGTH(buf))) {
287 (void) fprintf(
STDOUT,
"/* Generic cells: %100s */\n",
" ");
288 (void) fprintf(
STDOUT,
"/* -> %-112s */\n", buf);
290 (void) fprintf(
STDOUT,
"/* -> Generic cells : %-88s */\n", buf);
293 if (42L < (
LENGTH(buf))) {
294 (void) fprintf(
STDOUT,
"/* Generic generators: %100s */\n",
" ");
295 (void) fprintf(
STDOUT,
"/* -> %-112s */\n", buf);
297 (void) fprintf(
STDOUT,
"/* -> Generic generators : %-88s */\n", buf);
300 (void) fprintf(
STDOUT,
"\n/* According to the user's demand,");
301 (void) fprintf(
STDOUT,
" the ping function is implemented and activated. %44s */\n",
" ");
307 if (1 < (a + b + c)) {
308 (void) fprintf(
STDOUT,
"\n/* The main loop of the simulator is divided by the compiler");
309 (void) fprintf(
STDOUT,
" in %d blocks containing the code %34s */\n", a+b+c,
" ");
310 if ((!a) && (b) && (c)) {
311 (void) fprintf(
STDOUT,
"/* respectively for the node updates and the time domain output. %49s */\n",
" ");
313 if ((a) && (b) && (!c)) {
314 (void) fprintf(
STDOUT,
"/* respectively for the variable and node updates. %49s */\n",
" ");
316 if ((a) && (b) && (c)) {
317 (void) fprintf(
STDOUT,
"/* respectively for the variable and node updates and the time domain output. %49s */\n",
" ");
319 (void) fprintf(
STDOUT,
"\n");
326 (void) fprintf(
STDOUT,
"/* Each block may be divided up to %2d segments according to the netlist. %51s */\n", numused,
" ");
327 }
else if (1 < numused) {
328 (void) fprintf(
STDOUT,
"/* Each block may be divided up to %d segments according to the netlist. %51s */\n", numused,
" ");
331 (void) fprintf(
STDOUT,
"/* One or several segments have been added for the");
332 (void) fprintf(
STDOUT,
" appropriate processing of the 'output' instruction. %24s */\n",
" ");
336 (void) fprintf(
STDOUT,
"\n/* Main loop is divided up to %2d segments according to the netlist. %50s */\n", numused,
" ");
337 }
else if (1 < numused) {
338 (void) fprintf(
STDOUT,
"\n/* Main loop is divided up to %d segments according to the netlist. %51s */\n", numused,
" ");
341 (void) fprintf(
STDOUT,
"/* One or several segments have been added for the");
342 (void) fprintf(
STDOUT,
" appropriate processing of the 'output' instruction. %24s */\n",
" ");
346#if (IS_WIN64 == PLATFORM)
347 (void) fprintf(
STDOUT,
"\n/* This simulator is built for Windows OS, where the file names are not case-sensitive. %39s */\n",
" ");
349 (void) fprintf(
STDOUT,
"\n/* (char) coded with : %4ld %-86s */\n", (
long)
sizeof (
char),
"byte (C_TYPE)");
350 (void) fprintf(
STDOUT,
"/* (short int) coded with : %4ld %-86s */\n", (
long)
sizeof (
short),
"bytes" );
351 (void) fprintf(
STDOUT,
"/* (int) coded with : %4ld %-86s */\n", (
long)
sizeof (
int),
"bytes" );
352 (void) fprintf(
STDOUT,
"/* (long int) coded with : %4ld %-86s */\n", (
long)
sizeof (
long),
"bytes (P_TYPE)");
353 (void) fprintf(
STDOUT,
"/* (long long int) coded with : %4ld %-86s */\n", (
long)
sizeof (
long long),
"bytes (I_TYPE)");
354 (void) fprintf(
STDOUT,
"/* (float) coded with : %4ld %-86s */\n", (
long)
sizeof (
float),
"bytes (L_PREC)");
355 (void) fprintf(
STDOUT,
"/* (double float) coded with : %4ld %-86s */\n", (
long)
sizeof (
double),
"bytes (R_TYPE)");
356 (void) fprintf(
STDOUT,
"/* (long double float) coded with : %4ld %-86s */\n", (
long)
sizeof (
long double),
"bytes (H_PREC)");
357 (void) fprintf(
STDOUT,
"/* (size_t) coded with : %4ld %-86s */\n", (
long)
sizeof (
size_t),
"bytes" );
358 (void) fprintf(
STDOUT,
"/* (void*) coded with : %4ld %-86s */\n", (
long)
sizeof (
void*),
"bytes" );
359 (void) fprintf(
STDOUT,
"\n/* Resolution of a (double float) : %4ld %-86s */\n", (
long) DBL_DIG,
"digits" );
365 (void) fprintf(
STDOUT,
"\n/* Number of user's nodes : %4ld (INCLUDING 1 STUCK NODE) %53s */\n", n,
" " );
367 (void) fprintf(
STDOUT,
"\n/* Number of user's nodes : %4ld (INCLUDING %2ld STUCK NODES)%55s */\n", n,
Num_Stucks,
" ");
371 (void) fprintf(
STDOUT,
"/* Number of created nodes : %4ld %-86s */\n",
Num_Creates,
" ");
374 (void) fprintf(
STDOUT,
"/* Number of node injections : %4ld %-86s */\n",
Num_Injects,
" ");
378 if ((0 != strncmp(
Var_List[n].name1,
"$init$", (
size_t) 6))
379 && (0 != strncmp(
Var_List[n].name1,
"$null$", (
size_t) 6))
380 && (0 != strncmp(
Var_List[n].name1,
"$declare$", (
size_t) 9))) {
385 len = fprintf(
STDOUT,
"/* Number of user's variables : %4ld %5s ", m -
Num_Consts,
" ");
386 (void) fprintf(
STDOUT,
" %*s */\n", 126 - len,
" ");
389 (void) fprintf(
STDOUT,
"/* Number of created constants : %4ld %86s */\n",
Num_Consts,
" ");
395 (void) fprintf(
STDOUT,
"/* Number of analysis tools : %4ld %86s */\n",
Num_Tools,
" ");
400 if (0 != strcmp(
Post_List[n].function,
"post_void")) {
404 (void) fprintf(
STDOUT,
"/* Number of postprocessings : %4ld %86s */\n", m,
" ");
408 (void) fprintf(
STDOUT,
"/* Number of user's declarations : %4ld %86s */\n", n,
" ");
411 (void) fprintf(
STDOUT,
"/* Number of cell instantiations : %4ld %86s */\n",
Num_Cells,
" ");
413 (void) fprintf(
STDOUT,
"/* Maximum cell hierarchy depth : %4ld %86s */\n\n",
Max_Depth,
" ");
415 (void) fprintf(
STDOUT,
"\n");
418 (void) fprintf(
STDOUT,
"\n");
428 char *str = (
char*) NULL;
432 char unit[7] = {
'\0'};
442 (void) fprintf(
STDOUT,
"/* N.B. These sampling and rate informations are RELATIVE to the sampling %52s */\n",
" ");
443 (void) fprintf(
STDOUT,
"/* frequency input from the command line of this standalone simulator: %52s */\n\n",
" ");
444 (void) strcpy(unit,
" x fs ");
446 (void) strcpy(unit,
"Hz ");
450 (void) fprintf(
STDOUT,
"/* Simulation rate : ");
452 (void) fprintf(
STDOUT,
" %56s */\n",
" ");
454 (void) fprintf(
STDOUT,
"/* Simulation rate : ");
456 (void) fprintf(
STDOUT,
" %56s */\n",
" ");
460 (void) fprintf(
STDOUT,
"/* Sampling frequency : ");
462 (void) fprintf(
STDOUT,
" %56s */\n\n",
" ");
464 (void) fprintf(
STDOUT,
"/* Sampling frequency : ");
466 (void) fprintf(
STDOUT,
" %56s */\n\n",
" ");
473 (void) fprintf(
STDOUT,
"/* Sampling frequency : ");
476 (void) fprintf(
STDOUT,
"/* : ");
482 (void) fprintf(
STDERR,
" NAPA compiler internal bug, segment %ld: an integer was expected\n", n);
486 (void) fprintf(
STDOUT,
" i.e. segment always triggered */\n" );
488 (void) fprintf(
STDOUT,
" i.e. segment triggered 1 over %-11ld */\n",
D2I(r) );
495 (void) fprintf(
STDOUT,
"\n");
507 (void) fprintf(
STDOUT,
"/* A digital node is exported : %-88s */\n", tok);
509 (void) fprintf(
STDOUT,
"/* An analog node is exported : %-88s */\n", tok);
514 (void) fprintf(
STDOUT,
"/* A variable is exported : %-88s */\n", tok);
517 if ((0 != strcmp(tok,
"TIME"))
518 && (0 != strcmp(tok,
"ABS_TIME"))
519 && (0 != strcmp(tok,
"REF_TIME"))
520 && (0 != strcmp(tok,
"REL_TIME"))
521 && (0 != strcmp(tok,
"LOOP_INDEX"))
522 && (0 != strcmp(tok,
"ABS_LOOP_INDEX"))
523 && (0 != strcmp(tok,
"REL_LOOP_INDEX"))
524 && (0 != strcmp(tok,
"WALL_CLOCK"))) {
526 (void) fprintf(
STDERR,
" export <%s> must be a node, a variable\n", tok);
527 (void) fprintf(
STDERR,
" or macros 'TIME', 'ABS_TIME', 'REF_TIME', 'REL_TIME', 'WALL_CLOCK'\n");
528 (void) fprintf(
STDERR,
" 'LOOP_INDEX', 'ABS_LOOP_INDEX' and 'REL_LOOP_INDEX'\n");
532 (void) fprintf(
STDOUT,
"/* A macro is exported : %-88s */\n", tok);
540 (void) snprintf(buf2, (
size_t) (
LINLENGTH-1L),
"\"%s\"", buf1);
541 (void) fprintf(
STDOUT,
"/* A dump file may be output : %-88s */\n", buf2);
546 (void) snprintf(buf2, (
size_t) (
LINLENGTH-1L),
"\"%s\"", buf1);
547 (void) fprintf(
STDOUT,
"/* A load file is input : %-88s */\n", buf2);
550 (void) fprintf(
STDOUT,
"\n/* The sampling period is user-defined %46s */\n",
" ");
553 (void) fprintf(
STDOUT,
"\n");
555 (void) fprintf(
STDOUT,
"/* This simulator is set-up to exchange synchronization messages with the tools, %46s */\n",
" ");
556 (void) fprintf(
STDOUT,
"/* global variable TOOL_INDEX is set-up for this purpose. %46s */\n",
" ");
558 (void) fprintf(
STDOUT,
"/* This simulator is set-up in such a way that tools are NOT synchronized. %46s */\n",
" ");
562 (void) fprintf(
STDOUT,
"\n/* FYI, the internal pseudo-random generator uses");
563 (void) fprintf(
STDOUT,
" here a seed chosen randomly at the NAPA COMPILATION time. %19s */\n",
" ");
565 (void) fprintf(
STDOUT,
"/* It uses the value of the macro RANDOM_SEED defined below");
566 (void) fprintf(
STDOUT,
" to restart a simulation from this C file in the same conditions. */\n");
569 (void) fprintf(
STDOUT,
"\n/* FYI, the internal pseudo-random generator");
570 (void) fprintf(
STDOUT,
" uses a seed chosen randomly at the SIMULATION time. %24s */\n",
" ");
572 (void) fprintf(
STDOUT,
"/* Use the RANDOM_SEED value produced during this simulation");
573 (void) fprintf(
STDOUT,
" to restart a new simulation in the same conditions. %7s */\n",
" ");
576 (void) fprintf(
STDOUT,
"\n/* FYI, the internal pseudo-random generator");
577 (void) fprintf(
STDOUT,
" uses the seed given by the USER in the netlist. %24s */\n",
" ");
579 (void) fprintf(
STDOUT,
"/* A stream of pseudo-random numbers ANTITHETIC to the reference is generated. %48s */\n",
" ");
581 (void) fprintf(
STDOUT,
"/* A new run of the same netlist will give therefore the same results again. %48s */\n",
" ");
583 (void) fprintf(
STDOUT,
"\n/* Please feel free to report bugs or suggestions to 'yves.leduc.be@gmail.com' %48s */\n",
" ");
589 (void) fprintf(
STDOUT,
"\n\n/* *** INCLUDE ANSI-C [c2x] STANDARD HEADER FILES %s */\n\n",
multiple(
'*', 77L));
590 (void) fprintf(
STDOUT,
"#include <ctype.h>\n" );
591 (void) fprintf(
STDOUT,
"#include <limits.h>\n" );
592 (void) fprintf(
STDOUT,
"#include <float.h>\n" );
593 (void) fprintf(
STDOUT,
"#include <math.h>\n" );
594 (void) fprintf(
STDOUT,
"#include <stdio.h>\n" );
595 (void) fprintf(
STDOUT,
"#include <stdlib.h>\n" );
596 (void) fprintf(
STDOUT,
"#include <string.h>\n" );
597 (void) fprintf(
STDOUT,
"#include <time.h>\n" );
598 (void) fprintf(
STDOUT,
"#include <stdbool.h>\n");
599 (void) fprintf(
STDOUT,
"\n#ifdef __GNUC__\n" );
600 (void) fprintf(
STDOUT,
" #include <unistd.h>\n");
601 (void) fprintf(
STDOUT,
"#endif\n");
613 t = time((time_t*) NULL);
616 (void) fprintf(
STDOUT,
"\n\n/* *** MACRO CONSTANTS AND VARIABLES AVAILABLE TO USER %s */\n",
multiple(
'*', 72L));
617 (void) fprintf(
STDOUT,
"\n#define PLATFORM \"%s\"\n",
MACHINE );
622 (void) fprintf(
STDOUT,
"\n#define COMMENT \\\n");
630 (void) fprintf(
STDOUT,
"\n#define COMMENT \\\n");
638 (void) fprintf(
STDOUT,
"\n#define COMMAND_LINE ( napa_cmd_line )\n" );
639 (void) fprintf(
STDOUT,
"#define COMMAND_PARMS ( napa_cmd_parms )\n" );
642 (void) fprintf(
STDOUT,
"\n#define USER \"NAPA Standalone Simulator\"\n");
643 (void) fprintf(
STDOUT,
"#define CREATED ( napa_sim_time ) %49s/* unique time */\n",
" ");
644 (void) fprintf(
STDOUT,
"#define NAPA_JOB_ID ( napa_job_id ) %49s/* unique tag */\n\n",
" ");
648 (void) fprintf(
STDOUT,
"#define USER \"?\"\n");
652 (void) fprintf(
STDOUT,
" %*s /* from NAPA line command */\n", 63 - (
int) strlen(
User_Name),
" ");
655 (void) fprintf(
STDOUT,
"#define NAPA_JOB_ID \"%s\" %*s/* unique time */\n\n",
NAPA_Job_ID, l,
" ");
666 (void) fprintf(
STDOUT,
"%*s /* NAPA netlist file */\n", 60 - len,
" ");
668 (void) fprintf(
STDOUT,
"%*s /* NAPA main netlist file */\n", 60 - len,
" ");
671 (void) fprintf(
STDOUT,
"%*s /* this C file */\n", 62 - len,
" ");
674 (void) fprintf(
STDOUT,
"#define SOURCE \" - \"\n");
675 (void) fprintf(
STDOUT,
"#define CODE \" - \"\n");
683 (void) fprintf(
STDOUT,
"\n#define CWD napa_cwd %58s/* current working directory */\n",
" ");
684 (void) fprintf(
STDOUT,
"\n#define TITLE napa_title\n" );
686 (void) fprintf(
STDOUT,
"#define SHORT_TITLE napa_short_title\n");
688 (void) fprintf(
STDOUT,
"#define SHORT_TITLE napa_title\n" );
690 (void) fprintf(
STDOUT,
"\n#define TERMINATE " );
693 (void) fprintf(
STDOUT,
"\n#define USER_DEFINED_SAMPLING\n" );
696 for (i = 0L; i <
Num_IOs; i++) {
701 (void) fprintf(
STDOUT,
"\n#define NUM_OF_TIME_OUTPUTS %ldL\n", n );
704 (void) fprintf(
STDOUT,
"#define SEGMENT ( 0L )\n" );
706 (void) fprintf(
STDOUT,
"#define SEGMENT ( napa_segment )\n" );
708 (void) fprintf(
STDOUT,
"#define WAYPOINT ( napa_waypoint )\n\n" );
711 m = fprintf(
STDOUT,
"#define RANDOM_SEED (%sLL )", tok3 );
713 (void) fprintf(
STDOUT,
"%*s/* unique random seed */\n", 98 - m,
" " );
715 (void) fprintf(
STDOUT,
"%*s/* user's random seed */\n", 98 - m,
" " );
718 (void) fprintf(
STDOUT,
"#define RANDOM_SEED ( napa_random_seed )\n");
721 (void) fprintf(
STDOUT,
"#define ANTITHETIC ( true )\n" );
723 (void) fprintf(
STDOUT,
"#define ANTITHETIC ( false )\n");
725 (void) fprintf(
STDOUT,
"\n#define TIME ( (R_TYPE) napa_abs_time )\n" );
727 (void) fprintf(
STDOUT,
"#define REF_TIME ( (R_TYPE) napa_abs_time )\n" );
729 (void) fprintf(
STDOUT,
"#define REF_TIME ( (R_TYPE) napa_ref_time )\n" );
731 (void) fprintf(
STDOUT,
"#define ABS_TIME ( (R_TYPE) napa_abs_time )\n" );
733 (void) fprintf(
STDOUT,
"#define REL_TIME ( (R_TYPE) napa_rel_time )\n\n");
735 (void) fprintf(
STDOUT,
"#define REL_TIME ( (R_TYPE) napa_abs_time )\n\n");
739 (void) fprintf(
STDOUT,
"#define LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n" );
742 (void) fprintf(
STDOUT,
" %*s /* increment according to FS */\n", 96 - m,
" " );
745 (void) fprintf(
STDOUT,
"#define ABS_LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n" );
746 (void) fprintf(
STDOUT,
"#define REL_LOOP_INDEX ( (I_TYPE) napa_rel_loop )\n" );
748 (void) fprintf(
STDOUT,
"#define ABS_LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n" );
749 (void) fprintf(
STDOUT,
"#define REL_LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n" );
751 (void) fprintf(
STDOUT,
"\n");
754 (void) fprintf(
STDOUT,
"#define SIM_RATE ( napa_fs_ext )\n");
756 (void) fprintf(
STDOUT,
"#define SIM_RATE ( napa_fs_ext * %.15eL )\n",
Segment_List[0].rate);
758 (void) fprintf(
STDOUT,
"#define FS ( napa_fs_ext )\n");
764 (void) fprintf(
STDOUT,
"#define FSL ( (R_TYPE) napa_fsl[napa_segment] )");
765 (void) fprintf(
STDOUT,
" %*s /* segment dependent value */\n", 30,
" " );
766 (void) fprintf(
STDOUT,
"#define STL ( napa_stl[napa_segment] ) ");
767 (void) fprintf(
STDOUT,
" %*s /* segment dependent value */\n", 30,
" " );
770 (void) fprintf(
STDOUT,
"#define FSL ( (R_TYPE) napa_fs_ext ) ");
771 (void) fprintf(
STDOUT,
" %*s /* constant */\n", 30,
" " );
775 (void) fprintf(
STDOUT,
"#define STL 0LL\n" );
778 (void) fprintf(
STDOUT,
"#define LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n" );
779 (void) fprintf(
STDOUT,
"#define ABS_LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n\n");
780 (void) fprintf(
STDOUT,
"#define REL_LOOP_INDEX ( (I_TYPE) napa_abs_loop )\n\n");
781 (void) fprintf(
STDOUT,
"#define SIM_RATE ( 0.0L )\n");
782 (void) fprintf(
STDOUT,
"#define FS ( 0.0L )\n");
783 (void) fprintf(
STDOUT,
"#define FSL 0.0\n" );
784 (void) fprintf(
STDOUT,
"#define STL 0LL\n" );
787 (void) fprintf(
STDOUT,
"#define PERIODIC ( napa_per[napa_segment] )" );
788 (void) fprintf(
STDOUT,
" %*s /* segment dependent flag */\n", 39,
" " );
791 (void) fprintf(
STDOUT,
"#define PERIODIC ( true )\n" );
793 (void) fprintf(
STDOUT,
"#define PERIODIC ( false )\n");
797 (void) fprintf(
STDOUT,
"\n#define ERROR_FLAG ( napa_error_flag )\n");
798 (void) fprintf(
STDOUT,
"#define ASSERT_FLAG ( napa_assert_flag )\n");
800 (void) fprintf(
STDOUT,
"\n#define ERROR_FLAG ( napa_error_flag )\n" );
803 (void) fprintf(
STDOUT,
"\n#define DUMP_FLAG ( napa_dump_flag )\n" );
805 (void) fprintf(
STDOUT,
"\n#define WALL_CLOCK ( ((R_TYPE) (clock()-napa_wall_clock)) / ((R_TYPE) CLOCKS_PER_SEC) )\n");
806 (void) fprintf(
STDOUT,
"\n");
809 (void) fprintf(
STDOUT,
"#define TOOL_INDEX ( napa_tool_index )\n" );
811 (void) fprintf(
STDOUT,
"#define PACKET ( napa_packet )\n" );
813 (void) fprintf(
STDOUT,
"%*s /* one box per tool instance */\n", 97 - m,
" " );
818 (void) fprintf(
STDOUT,
"#define SYNCHRONIZE ( YES )\n");
820 (void) fprintf(
STDOUT,
"#define SYNCHRONIZE ( NO )\n" );
823 (void) fprintf(
STDOUT,
"\n");
833 (void) fprintf(
STDOUT,
"%*s /* output format by default */\n", 97 - m,
" ");
835 (void) fprintf(
STDOUT,
"%*s /* as defined by user */\n", 97 - m,
" ");
839 (void) fprintf(
STDOUT,
"%*s /* output format by default */\n", 97 - m,
" ");
841 (void) fprintf(
STDOUT,
"%*s /* as defined by user */\n", 97 - m,
" ");
845 (void) fprintf(
STDOUT,
"%*s /* output format by default */\n", 97 - m,
" ");
847 (void) fprintf(
STDOUT,
"%*s /* as defined by user */\n", 97 - m,
" ");
851 (void) fprintf(
STDOUT,
"%*s /* output format by default */\n", 97 - m,
" ");
853 (void) fprintf(
STDOUT,
"%*s /* as defined by user */\n", 97 - m,
" ");
859 (void) fprintf(
STDOUT,
"\n#define SEPARATOR \"\\n\"\n" );
860 (void) fprintf(
STDOUT,
"\n#define ANALOG_INI 0.0\n" );
861 (void) fprintf(
STDOUT,
"#define DIGITAL_INI 0LL\n" );
862 (void) fprintf(
STDOUT,
"\n#define TRUE ( true )\n" );
863 (void) fprintf(
STDOUT,
"#define FALSE ( false )\n" );
864 (void) fprintf(
STDOUT,
"#define YES ( true )\n" );
865 (void) fprintf(
STDOUT,
"#define NO ( false )\n" );
866 (void) fprintf(
STDOUT,
"\n#define LITTLE_ENDIAN ( 1 )\n" );
867 (void) fprintf(
STDOUT,
"#define BIG_ENDIAN ( 0 )\n" );
869 (void) fprintf(
STDOUT,
"#define CPU_ARCHITECTURE ( LITTLE_ENDIAN )" );
871 (void) fprintf(
STDOUT,
"#define CPU_ARCHITECTURE ( BIG_ENDIAN )" );
873 (void) fprintf(
STDOUT,
" %*s /* targetted architecture */\n", 48,
" " );
875 (void) fprintf(
STDOUT,
"\n\n/* *** MACRO FUNCTIONS MADE AVAILABLE TO USER AND USER'S FUNCTIONS %s */\n",
multiple(
'*', 60L));
877 (void) fprintf(
STDOUT,
"\n\n/* *** MACRO FUNCTIONS MADE AVAILABLE TO USER %s */\n",
multiple(
'*', 81L));
879 (void) fprintf(
STDOUT,
"\n#define MIN(x,y) (((x)<(y))?(x):(y))" );
880 (void) fprintf(
STDOUT,
" %31s /* regardless of the type */\n",
" " );
881 (void) fprintf(
STDOUT,
"#define MAX(x,y) (((x)>(y))?(x):(y))" );
882 (void) fprintf(
STDOUT,
" %31s /* regardless of the type */\n",
" " );
883 (void) fprintf(
STDOUT,
"#define CLIP(x,l,h) (((x)<(l))?(l):(((x)>(h))?(h):(x)))" );
884 (void) fprintf(
STDOUT,
" %15s /* regardless of the type */\n",
" " );
885 (void) fprintf(
STDOUT,
"\n#define ABS(x) ((0.0<(x))?(x):-(x))" );
886 (void) fprintf(
STDOUT,
" %30s /* regardless of the type */\n",
" " );
887 (void) fprintf(
STDOUT,
"#define SIGN(x) ((EPSILON<(x))-(-EPSILON>(x))) " );
888 (void) fprintf(
STDOUT,
" /* returns -1, 0 or 1 */\n" );
889 (void) fprintf(
STDOUT,
"\n#define ISSMALL(x) (EPSILON>=ABS(x)) " );
890 (void) fprintf(
STDOUT,
" /* to be used in replacement of ( 0.0 == x ) */\n" );
891 (void) fprintf(
STDOUT,
"#define ISNOTSMALL(x) (EPSILON< ABS(x)) " );
892 (void) fprintf(
STDOUT,
" /* to be used in replacement of ( 0.0 != x ) */\n" );
893 (void) fprintf(
STDOUT,
"\n#define ISINTEGER(x) (((I_TYPE)(x))==(x)) " );
894 (void) fprintf(
STDOUT,
" /* check the value, regardless of the type */\n" );
895 (void) fprintf(
STDOUT,
"#define ISNAN(x) ((x)!=(x)) " );
896 (void) fprintf(
STDOUT,
" /* check if the value is NaN */\n" );
897 (void) fprintf(
STDOUT,
"\n#define ISEVEN(x) (0LL==(D2I(x)%%2LL)) " );
898 (void) fprintf(
STDOUT,
" /* check the value, regardless of the type */\n");
899 (void) fprintf(
STDOUT,
"#define ISODD(x) (0LL!=(D2I(x)%%2LL)) " );
900 (void) fprintf(
STDOUT,
" /* check the value, regardless of the type */\n");
901 (void) fprintf(
STDOUT,
"\n#define ISEQUAL(x,y) (ABS((x)-(y))<=(EPSILON*(ABS(x)+ABS(y))))");
902 (void) fprintf(
STDOUT,
" /* to be used in replacement of ( x == y ) */\n" );
903 (void) fprintf(
STDOUT,
"#define ISNOTEQUAL(x,y) (ABS((x)-(y))> (EPSILON*(ABS(x)+ABS(y))))");
904 (void) fprintf(
STDOUT,
" /* to be used in replacement of ( x != y ) */\n" );
905 (void) fprintf(
STDOUT,
"\n#define ISINSIDE(x,l,h) (((x)>=(l))&&((x)<=(h))) " );
906 (void) fprintf(
STDOUT,
" /* inside the interval [l,h] */\n" );
907 (void) fprintf(
STDOUT,
"#define ISOUTSIDE(x,l,h) (((x)< (l))||((x)> (h))) " );
908 (void) fprintf(
STDOUT,
" /* outside the interval ]l,h[ */\n" );
909 (void) fprintf(
STDOUT,
"#define ISTIME(t) (((FSL*((t)-TIME))<0.5)&&((FSL*(TIME-(t)))<=0.5))");
910 (void) fprintf(
STDOUT,
" /* time inside the local sampling interval */\n" );
911 (void) fprintf(
STDOUT,
"\n#define MODULO(x,y) ((x)-((y)*floor(((R_TYPE)(x))/((R_TYPE)(y)))))" );
912 (void) fprintf(
STDOUT,
" /* regardless of the type */\n" );
913 (void) fprintf(
STDOUT,
"\n#define SIN(x) ((R_TYPE)sinl((H_PREC)(x))) " );
914 (void) fprintf(
STDOUT,
" /* keep the best precision when x is large */\n" );
915 (void) fprintf(
STDOUT,
"#define COS(x) ((R_TYPE)cosl((H_PREC)(x))) " );
916 (void) fprintf(
STDOUT,
" /* keep the best precision when x is large */\n" );
917 (void) fprintf(
STDOUT,
"#define SQR(x) ((x)*(x)) " );
918 (void) fprintf(
STDOUT,
" /* regardless of the type */\n" );
919 (void) fprintf(
STDOUT,
"#define SQRT(x) sqrt(MAX(0.0,(x))) " );
920 (void) fprintf(
STDOUT,
" /* avoiding negative values */\n" );
921 (void) fprintf(
STDOUT,
"#define LOG(x) log(MAX(EPSILON,(x))) " );
922 (void) fprintf(
STDOUT,
" /* avoiding values below or equal to zero */\n" );
923 (void) fprintf(
STDOUT,
"#define POW(x,y) pow(MAX(0.0,(x)),(y)) " );
924 (void) fprintf(
STDOUT,
" /* avoiding negative values */\n" );
925 (void) fprintf(
STDOUT,
"#define ROOT(x,y) POW((x),1.0/((R_TYPE)(y))) " );
926 (void) fprintf(
STDOUT,
" /* avoiding negative values */\n" );
927 (void) fprintf(
STDOUT,
"#define LOG10(x) log10(MAX(EPSILON,(x))) " );
928 (void) fprintf(
STDOUT,
" /* avoiding values below or equal to zero */\n" );
929 (void) fprintf(
STDOUT,
"#define POW10(y) pow(10.0,(y))\n" );
930 (void) fprintf(
STDOUT,
"\n#define POWEROF2(n) ((0LL<((I_TYPE)(n)))?(1LL<<((I_TYPE)(n))):1LL)");
931 (void) fprintf(
STDOUT,
" /* valid only for positive integers */\n" );
932 (void) fprintf(
STDOUT,
"\n#define I2D(n) ((R_TYPE)(n))" );
933 (void) fprintf(
STDOUT,
" %*s /* convert integer to real */\n", 37,
" " );
934 (void) fprintf(
STDOUT,
"#define D2I(x) ((0.0<(x))?((I_TYPE)((x)+0.5)):((I_TYPE)((x)-0.5)))");
935 (void) fprintf(
STDOUT,
" /* convert real to nearest integer */\n" );
936 (void) fprintf(
STDOUT,
"\n#define DB2LIN(x,r) ((r)*POW10(0.05*(x)))" );
937 (void) fprintf(
STDOUT,
" %*s /* convert dB to linear */\n", 29,
" " );
938 (void) fprintf(
STDOUT,
"#define LIN2DB(x,r) (20.0*LOG10(((R_TYPE)(x))/((R_TYPE)(r))))");
939 (void) fprintf(
STDOUT,
" %*s /* convert linear to dB */\n", 9,
" " );
940 (void) fprintf(
STDOUT,
"#define DB2POW(x,r) ((r)*POW10(0.10*(x)))" );
941 (void) fprintf(
STDOUT,
" %*s /* convert dB to power */\n", 29,
" " );
942 (void) fprintf(
STDOUT,
"#define POW2DB(x,r) (10.0*LOG10(((R_TYPE)(x))/((R_TYPE)(r))))");
943 (void) fprintf(
STDOUT,
" %*s /* convert power to dB */\n", 9,
" " );
944 (void) fprintf(
STDOUT,
"#define RAD2DEG(x) (%19.16Lf*((R_TYPE)(x)))",
_R2D_ );
945 (void) fprintf(
STDOUT,
" %*s /* convert radian to degree */\n", 15,
" " );
946 (void) fprintf(
STDOUT,
"#define DEG2RAD(x) (%21.20Lf*((R_TYPE)(x)))",
_D2R_ );
947 (void) fprintf(
STDOUT,
" %*s /* convert degree to radian */\n", 12,
" " );
948 (void) fprintf(
STDOUT,
"\n#define B2A(b) ((b)?\"true\":\"false\")" );
949 (void) fprintf(
STDOUT,
" %*s /* convert boolean to string %*s */\n", 30,
" ", 15,
" " );
950 (void) fprintf(
STDOUT,
"#define LENGTH(s) ((I_TYPE)strlen(s))" );
951 (void) fprintf(
STDOUT,
" %*s /* length of a string */\n", 31,
" " );
952 (void) fprintf(
STDOUT,
"\n#define LINDOMAIN(c,b,e) ((b)+((c)*((e)-(b)))) ");
953 (void) fprintf(
STDOUT,
" /* linear rule of thumb */\n" );
954 (void) fprintf(
STDOUT,
"#define LOGDOMAIN(c,b,e) ((b)*POW10((c)*LOG10(((R_TYPE)(e))/((R_TYPE)(b))))) ");
955 (void) fprintf(
STDOUT,
" /* logarithmic rule of thumb */\n" );
956 (void) fprintf(
STDOUT,
"#define LINSWEEP(c,b,e,n) LINDOMAIN((((R_TYPE)(c))/((R_TYPE)((n)-1L))),(b),(e)) ");
957 (void) fprintf(
STDOUT,
" /* linearly spaced */\n" );
958 (void) fprintf(
STDOUT,
"#define LOGSWEEP(c,b,e,n) LOGDOMAIN((((R_TYPE)(c))/((R_TYPE)((n)-1L))),(b),(e)) ");
959 (void) fprintf(
STDOUT,
" /* logarithmically spaced */\n\n" );
961 (void) fprintf(
STDOUT,
"#define RAND_01() (1.11022302462515666e-16* ((R_TYPE)(napa_rand()>>10)) )");
962 (void) fprintf(
STDOUT,
" /* number in interval [0,1] */\n" );
963 (void) fprintf(
STDOUT,
"#define RAND_01_X() (2.22044604925031332e-16*(((R_TYPE)(napa_rand()>>11))+0.5))");
964 (void) fprintf(
STDOUT,
" /* number in interval ]0,1[ */\n\n" );
966 (void) fprintf(
STDOUT,
"#define RAND_01() (1.0-(1.11022302462515666e-16*( (R_TYPE)(napa_rand()>>10)))) ");
967 (void) fprintf(
STDOUT,
" /* number in interval [0,1] */\n" );
968 (void) fprintf(
STDOUT,
"#define RAND_01_X() (1.0-(2.22044604925031332e-16*(((R_TYPE)(napa_rand()>>11))+0.5)))");
969 (void) fprintf(
STDOUT,
" /* number in interval ]0,1[ */\n\n" );
973 (void) fprintf(
STDOUT,
"#define FSS(s) ((R_TYPE)napa_fsl[s])");
974 (void) fprintf(
STDOUT,
" %*s /* applied to segment 0..%2ld */\n", 44,
" ",
Num_Segments-1L);
975 (void) fprintf(
STDOUT,
"#define STS(s) (napa_stl[s])" );
976 (void) fprintf(
STDOUT,
" %*s /* applied to segment 0..%2ld */\n", 52,
" ",
Num_Segments-1L);
978 (void) fprintf(
STDOUT,
"#define FSS(s) ((R_TYPE)napa_fsl[s])");
979 (void) fprintf(
STDOUT,
" %*s /* applied to segment 0..%ld */\n", 44,
" ",
Num_Segments-1L);
980 (void) fprintf(
STDOUT,
"#define STS(s) (napa_stl[s])" );
981 (void) fprintf(
STDOUT,
" %*s /* applied to segment 0..%ld */\n", 52,
" ",
Num_Segments-1L);
984 (void) fprintf(
STDOUT,
"#define FSS(s) ((R_TYPE)napa_fs_ext)" );
985 (void) fprintf(
STDOUT,
" %s /* constant */\n",
multiple(
' ', 96L-n) );
988 (void) fprintf(
STDOUT,
" %s /* constant */\n",
multiple(
' ', 96L-n) );
990 (void) fprintf(
STDOUT,
"#define STS(s) 0LL" );
991 (void) fprintf(
STDOUT,
" %62s /* constant */\n",
" ");
994 (void) fprintf(
STDOUT,
"#define FSS(s) 0.0" );
995 (void) fprintf(
STDOUT,
" %62s /* constant */\n",
" ");
996 (void) fprintf(
STDOUT,
"#define STS(s) 0LL\n" );
997 (void) fprintf(
STDOUT,
" %62s /* constant */\n",
" ");
1000 (void) fprintf(
STDOUT,
"#define PS(s) (napa_per[s])" );
1001 (void) fprintf(
STDOUT,
" %*s /* applied to segment 0..%2ld */\n", 52,
" ",
Num_Segments-1L);
1003 (void) fprintf(
STDOUT,
"#define PS(s) (napa_per[s])" );
1004 (void) fprintf(
STDOUT,
" %*s /* applied to segment 0..%ld */\n", 52,
" ",
Num_Segments-1L);
1006 (void) fprintf(
STDOUT,
"#define PS(s) true" );
1007 (void) fprintf(
STDOUT,
" %61s /* constant */\n",
" ");
1040 (void) fprintf(
STDOUT,
"\n#define TIMER(n) napa_timer(n)" );
1041 (void) fprintf(
STDOUT,
" %52s /* pause for n seconds */\n",
" ");
1043 if (0 == strcmp(
Ping_List.fname,
"stderr")) {
1044 (void) fprintf(
STDOUT,
"\n#define PING(fun) \\\n" );
1045 (void) fprintf(
STDOUT,
" void napa_ping_ ## fun(void); \\\n" );
1046 (void) fprintf(
STDOUT,
" void napa_ping_ ## fun(void) { \\\n" );
1047 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Ping Information : \" ); \\\n" );
1048 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"function '%%-%lds\", #fun \"()' \" ); \\\n", 5L+n);
1049 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"from file \\\"%%s\\\"\\n\", __FILE__ ); \\\n" );
1050 (void) fprintf(
STDOUT,
" return; \\\n" );
1051 (void) fprintf(
STDOUT,
" }\n");
1052 (void) fprintf(
STDOUT,
"#define PING_FAIL(fun) %44s \\\n",
" ");
1053 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Ping Information : \" ); \\\n" );
1054 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"function '%%-%lds\", #fun \"()' \" ); \\\n", 5L+n);
1055 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"exists but cannot be located\\n\");\n" );
1057 (void) fprintf(
STDOUT,
"\n#define PING(fun) \\\n");
1058 (void) fprintf(
STDOUT,
" void napa_ping_ ## fun(void); \\\n");
1059 (void) fprintf(
STDOUT,
" void napa_ping_ ## fun(void) { \\\n");
1060 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" function '%%-%lds\", #fun \"()'\"); \\\n", 5L+n);
1061 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \"from file \\\"%%s\\\"\\n\", __FILE__ ); \\\n" );
1062 (void) fprintf(
STDOUT,
" return; \\\n");
1063 (void) fprintf(
STDOUT,
" }\n");
1064 (void) fprintf(
STDOUT,
"#define PING_FAIL(fun) %47s \\\n",
" ");
1065 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" function '%%-%lds\", #fun \"()'\"); \\\n", 5L+n);
1066 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \"exists but cannot be located\\n\" );\n" );
1069 (void) fprintf(
STDOUT,
"\n#define PING(fun) %78s /* empty function */\n",
" " );
1071 (void) fprintf(
STDOUT,
"\n\n/* *** MACRO FUNCTIONS TO BE USED IN USER, TOOL AND POST FUNCTIONS %s */\n",
multiple(
'*', 60L));
1072 (void) fprintf(
STDOUT,
"\n#define IO_COMMAND_NAME(c) (napa_IO_cmd[c])");
1073 (void) fprintf(
STDOUT,
" %49s /* list defined below */\n",
" " );
1074 (void) fprintf(
STDOUT,
"#define IO_MANAGER(c,f,n,s,t) napa_IO_manager(c,f,n,s,t)");
1075 (void) fprintf(
STDOUT,
" %39s /* function defined below */\n",
" " );
1077 (void) fprintf(
STDOUT,
"\n#define ISOPTION(f,i,o) (0.0<(*napa_check_for_option(f,i,o,1)))");
1078 (void) fprintf(
STDOUT,
" %26s /* for user, tool, post */\n",
" " );
1080 (void) fprintf(
STDOUT,
"#define ISNOTOPTION(f,i) (ISOPTION(f,i,\"_another_\")" );
1081 (void) fprintf(
STDOUT,
"&&(!ISOPTION(f,i,\"delayed_node\")))" );
1082 (void) fprintf(
STDOUT,
" /* for user, tool, post */\n" );
1084 (void) fprintf(
STDOUT,
"#define ISNOTOPTION(f,i) (ISOPTION(f,i,\"_another_\"))");
1085 (void) fprintf(
STDOUT,
" %38s /* for user, tool, post */\n",
" " );
1087 (void) fprintf(
STDOUT,
"#define ISPARAMETER(f,i,o) (((double*)NULL)!=napa_check_for_option(f,i,o,0))");
1088 (void) fprintf(
STDOUT,
" %16s /* for user, tool, post */\n",
" " );
1089 (void) fprintf(
STDOUT,
"#define GETPARMADDRESS(f,i,o) napa_check_for_option(f,i,o,0)" );
1090 (void) fprintf(
STDOUT,
" %35s /* for user, tool, post */\n",
" " );
1092 (void) fprintf(
STDOUT,
"#define ISDELAYED(f,i) (ISOPTION(f,i,\"delayed_node\"))");
1093 (void) fprintf(
STDOUT,
" %35s /* for user functions only */\n",
" " );
1096 (void) fprintf(
STDOUT,
"\n\n/* *** SUGGESTION: USE THESE NAPA DIRECTIVES IN THE NAPA NETLIST");
1097 (void) fprintf(
STDOUT,
" TO CONFIGURE FURTHER THIS SIMULATION %s */\n\n",
multiple(
'*', 24L));
1100 (void) fprintf(
STDOUT,
"/* directive TIME_OFFSET <H_PREC Number> %79s */\n",
" ");
1104 (void) fprintf(
STDOUT,
"/* directive JITTER <H_PREC Formula> %79s */\n",
" ");
1109 (void) fprintf(
STDOUT,
"/* directive STRICTLY_NO_BANNER %94s */\n",
" ");
1115 (void) fprintf(
STDOUT,
"/* directive NO_BANNER %98s */\n",
" ");
1119 (void) fprintf(
STDOUT,
"/* directive NO_TIME_OUTPUT %98s */\n",
" ");
1125 (void) fprintf(
STDOUT,
"/* directive NO_ASSERT %98s */\n",
" ");
1130 (void) fprintf(
STDOUT,
"/* directive EXTERNAL_PSEUDO_RANDOM_NUMBER_GENERATOR <File Pathname> %50s */\n",
" ");
1134 (void) fprintf(
STDOUT,
"/* directive NAPA_EXIT_STATUS %96s */\n",
" ");
1137#if YES == COMPILE_LOOP_OPTION
1139 (void) fprintf(
STDOUT,
"/* directive NAPA_LOOP_OPTION <YES|NO> %86s */\n",
" ");
1144 (void) fprintf(
STDOUT,
"\n");
1149 (void) fprintf(
STDOUT,
"/* debug DUMP %108s */\n",
" ");
1154 (void) fprintf(
STDOUT,
"/* debug IO %102s */\n",
" ");
1158 (void) fprintf(
STDOUT,
"\n");
1161 (void) fprintf(
STDOUT,
"/* directive ALL_DEBUG %102s */\n",
" ");
1165 (void) fprintf(
STDOUT,
"/* directive VERBOSE %105s */\n\n",
" ");
1167 (void) fprintf(
STDOUT,
"/* [ The header files of the library may also be configured with specific directives,");
1168 (void) fprintf(
STDOUT,
" please consult related documentation ] */\n\n");
1171 (void) fprintf(
STDOUT,
"#define TIME_OFFSET_IS_REGISTERED\n");
1175 (void) fprintf(
STDOUT,
"#define ALL_DEBUG_IS_REGISTERED\n" );
1179 (void) fprintf(
STDOUT,
"#define JITTER_IS_REGISTERED\n" );
1184 (void) fprintf(
STDOUT,
"#define STRICTLY_NO_BANNER_IS_REGISTERED\n");
1190 (void) fprintf(
STDOUT,
"#define NO_BANNER_IS_REGISTERED\n" );
1194 (void) fprintf(
STDOUT,
"#define NO_TIME_OUTPUT_IS_REGISTERED\n");
1200 (void) fprintf(
STDOUT,
"#define NO_ASSERT_IS_REGISTERED\n" );
1205 (void) fprintf(
STDOUT,
"#define EXTERNAL_PSEUDO_RANDOM_NUMBER_GENERATOR_IS_REGISTERED\n");
1209 (void) fprintf(
STDOUT,
"#define NAPA_EXIT_STATUS_IS_REGISTERED\n");
1213#if YES == COMPILE_LOOP_OPTION
1215 (void) fprintf(
STDOUT,
"#define NAPA_LOOP_OPTION_IS_REGISTERED\n");
1220 (void) fprintf(
STDOUT,
"\n");
1225 (void) fprintf(
STDOUT,
"#define DEBUG_MODE_DUMP_IS_REGISTERED\n" );
1230 (void) fprintf(
STDOUT,
"#define DEBUG_MODE_IO_IS_REGISTERED\n" );
1234 (void) fprintf(
STDOUT,
"\n");
1237 (void) fprintf(
STDOUT,
"#define VERBOSE_IS_REGISTERED\n\n" );
1245 char *str = (
char*) NULL;
1247 (void) fprintf(
STDOUT,
"( " );
1251 (void) fprintf(
STDOUT,
" )\n");
1255 (void) fprintf(
STDOUT,
"%s", tok);
1263 double rate1, rate2;
1268 int d_ram1_flag, i_ram1_flag;
1269 int d_ram2_flag, i_ram2_flag;
1270 int d_rom1_flag, i_rom1_flag;
1271 int d_rom2_flag, i_rom2_flag;
1273 (void) fprintf(
STDOUT,
"\n/* *** DECLARE NAPA TYPES %s */\n\n",
multiple(
'*', 101L));
1274 (void) fprintf(
STDOUT,
"typedef %11s I_TYPE;\n",
"long long" );
1275 (void) fprintf(
STDOUT,
"typedef %11s R_TYPE;\n",
"double" );
1276 (void) fprintf(
STDOUT,
"typedef %11s C_TYPE;\n",
"char" );
1277 (void) fprintf(
STDOUT,
"typedef %11s P_TYPE;\n",
"long" );
1280 (void) fprintf(
STDOUT,
"typedef %11s V_TYPE;\n",
"long long" );
1283 (void) fprintf(
STDOUT,
"typedef %11s V_TYPE;\n",
"double" );
1286 (void) fprintf(
STDOUT,
"\ntypedef %11s L_PREC;\n",
"float" );
1287 (void) fprintf(
STDOUT,
"typedef %11s H_PREC;\n",
"long double" );
1288 (void) fprintf(
STDOUT,
"\n#define _IO_LST_ \\\n");
1289 (void) fprintf(
STDOUT,
" _IO_( UNKNOWN ) \\\n");
1290 (void) fprintf(
STDOUT,
" _IO_( CLOSE ) \\\n");
1291 (void) fprintf(
STDOUT,
" _IO_( OPENREAD ) \\\n");
1292 (void) fprintf(
STDOUT,
" _IO_( OPENREAD_BINARY ) \\\n");
1293 (void) fprintf(
STDOUT,
" _IO_( OPENWRITE ) \\\n");
1294 (void) fprintf(
STDOUT,
" _IO_( OPENWRITE_BINARY ) \\\n");
1295 (void) fprintf(
STDOUT,
" _IO_( OPENAPPEND ) \\\n");
1296 (void) fprintf(
STDOUT,
" _IO_( OPENAPPEND_BINARY ) \\\n");
1297 (void) fprintf(
STDOUT,
" _IO_( QUERY ) \\\n");
1298 (void) fprintf(
STDOUT,
" _IO_( REWIND ) \\\n");
1299 (void) fprintf(
STDOUT,
" _IO_( REWRITE ) \\\n");
1300 (void) fprintf(
STDOUT,
" _IO_( ALLOCATE ) \\\n");
1301 (void) fprintf(
STDOUT,
" _IO_( FREE ) \\\n");
1302 (void) fprintf(
STDOUT,
" _IO_( DELETE ) \\\n");
1303 (void) fprintf(
STDOUT,
" _IO_( RESET ) \\\n");
1304 (void) fprintf(
STDOUT,
" _IO_( DEBUG )\n" );
1305 (void) fprintf(
STDOUT,
"#define _IO_(x) x,\n");
1306 (void) fprintf(
STDOUT,
"typedef enum { _IO_LST_ } IO_COMMAND;");
1307 (void) fprintf(
STDOUT,
" %*s /* enumeration of the NAPA I/O commands %*s */\n\n", 43,
" ", 4,
" ");
1308 (void) fprintf(
STDOUT,
"#undef _IO_\n" );
1309 (void) fprintf(
STDOUT,
"#define _IO_(x) #x,\n" );
1310 (void) fprintf(
STDOUT,
"const char* const napa_IO_cmd[16] = { _IO_LST_ };");
1311 (void) fprintf(
STDOUT,
" %*s /* strings corresponding to the I/O commands */\n\n", 30,
" ");
1312 (void) fprintf(
STDOUT,
"#undef _IO_\n" );
1313 (void) fprintf(
STDOUT,
"#undef _IO_LST_\n\n" );
1314 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1315 (void) fprintf(
STDOUT,
" C_TYPE name[512];\n");
1316 (void) fprintf(
STDOUT,
" C_TYPE **s_ptr;\n" );
1317 (void) fprintf(
STDOUT,
" C_TYPE **n_ptr;\n" );
1318 (void) fprintf(
STDOUT,
" I_TYPE **i_ptr;\n" );
1319 (void) fprintf(
STDOUT,
" R_TYPE **d_ptr;\n" );
1320 (void) fprintf(
STDOUT,
" C_TYPE **c_ptr;\n" );
1321 (void) fprintf(
STDOUT,
" int nflag;\n" );
1322 (void) fprintf(
STDOUT,
" int pflag;\n" );
1323 (void) fprintf(
STDOUT,
" long length;\n" );
1324 (void) fprintf(
STDOUT,
" long nrow;\n" );
1325 (void) fprintf(
STDOUT,
" long ncol;\n" );
1326 (void) fprintf(
STDOUT,
"} DATA_RECORD;\n\n" );
1327 d_ram1_flag =
false;
1328 i_ram1_flag =
false;
1329 d_ram2_flag =
false;
1330 i_ram2_flag =
false;
1331 d_rom1_flag =
false;
1332 i_rom1_flag =
false;
1333 d_rom2_flag =
false;
1334 i_rom2_flag =
false;
1375 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1376 (void) fprintf(
STDOUT,
" R_TYPE *data;\n" );
1377 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1378 (void) fprintf(
STDOUT,
" H_PREC last;\n" );
1379 (void) fprintf(
STDOUT,
" int *flag;\n" );
1380 (void) fprintf(
STDOUT,
"} RAM_R_RECORD;\n\n" );
1383 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1384 (void) fprintf(
STDOUT,
" I_TYPE *data;\n" );
1385 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1386 (void) fprintf(
STDOUT,
" H_PREC last;\n" );
1387 (void) fprintf(
STDOUT,
" int *flag;\n" );
1388 (void) fprintf(
STDOUT,
"} RAM_I_RECORD;\n\n" );
1391 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1392 (void) fprintf(
STDOUT,
" R_TYPE *data;\n" );
1393 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1394 (void) fprintf(
STDOUT,
" I_TYPE address;\n");
1395 (void) fprintf(
STDOUT,
" I_TYPE rw;\n" );
1396 (void) fprintf(
STDOUT,
" H_PREC last;\n" );
1397 (void) fprintf(
STDOUT,
" int *flag;\n" );
1398 (void) fprintf(
STDOUT,
"} RAM2_R_RECORD;\n\n" );
1401 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1402 (void) fprintf(
STDOUT,
" I_TYPE *data;\n" );
1403 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1404 (void) fprintf(
STDOUT,
" I_TYPE address;\n");
1405 (void) fprintf(
STDOUT,
" I_TYPE rw;\n" );
1406 (void) fprintf(
STDOUT,
" H_PREC last;\n" );
1407 (void) fprintf(
STDOUT,
" int *flag;\n" );
1408 (void) fprintf(
STDOUT,
"} RAM2_I_RECORD;\n\n" );
1411 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1412 (void) fprintf(
STDOUT,
" R_TYPE *data;\n" );
1413 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1414 (void) fprintf(
STDOUT,
"} ROM_R_RECORD;\n\n" );
1417 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1418 (void) fprintf(
STDOUT,
" I_TYPE *data;\n" );
1419 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1420 (void) fprintf(
STDOUT,
"} ROM_I_RECORD;\n\n" );
1423 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1424 (void) fprintf(
STDOUT,
" R_TYPE *data;\n" );
1425 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1426 (void) fprintf(
STDOUT,
" I_TYPE address;\n");
1427 (void) fprintf(
STDOUT,
"} ROM2_R_RECORD;\n\n" );
1430 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1431 (void) fprintf(
STDOUT,
" I_TYPE *data;\n" );
1432 (void) fprintf(
STDOUT,
" I_TYPE length;\n" );
1433 (void) fprintf(
STDOUT,
" I_TYPE address;\n");
1434 (void) fprintf(
STDOUT,
"} ROM2_I_RECORD;\n\n" );
1436 (void) fprintf(
STDOUT,
"typedef struct {\n" );
1437 (void) fprintf(
STDOUT,
" FILE *f_ptr;\n" );
1438 (void) fprintf(
STDOUT,
" C_TYPE *user;\n" );
1439 (void) fprintf(
STDOUT,
" long id;\n" );
1440 (void) fprintf(
STDOUT,
" IO_COMMAND mode;\n" );
1441 (void) fprintf(
STDOUT,
" int iflag;\n" );
1442 (void) fprintf(
STDOUT,
" int oflag;\n" );
1443 (void) fprintf(
STDOUT,
"} IO_RECORD;\n");
1445 (void) fprintf(
STDOUT,
"\ntypedef struct {\n");
1446 (void) fprintf(
STDOUT,
" long *store_i; %*s /* managed by user */\n", 74,
" ");
1447 (void) fprintf(
STDOUT,
" I_TYPE *store_l; %*s /* managed by user */\n", 74,
" ");
1448 (void) fprintf(
STDOUT,
" R_TYPE *store_d; %*s /* managed by user */\n", 74,
" ");
1449 (void) fprintf(
STDOUT,
" C_TYPE **store_s; %*s /* managed by user */\n", 74,
" ");
1450 (void) fprintf(
STDOUT,
" I_TYPE n; %*s /* managed by user */\n", 74,
" ");
1451 (void) fprintf(
STDOUT,
" I_TYPE i; %*s /* message input */\n", 74,
" ");
1452 (void) fprintf(
STDOUT,
" I_TYPE o; %*s /* message output */\n", 74,
" ");
1453 (void) fprintf(
STDOUT,
" long m; %*s /* mailbox ID */\n", 74,
" ");
1454 (void) fprintf(
STDOUT,
" long s; %*s /* segment ID */\n", 74,
" ");
1455 (void) fprintf(
STDOUT,
" char t[64]; %*s /* tool name */\n", 74,
" ");
1456 (void) fprintf(
STDOUT,
" char u[%ld]; %*s /* node name */\n",
STRLENGTH, 73,
" ");
1457 (void) fprintf(
STDOUT,
"} MAILBOX_RECORD;\n");
1480 (void) fprintf(
STDOUT,
"\n\n/* *** DECLARE GLOBAL CONSTANTS %s */\n\n",
multiple(
'*', 95L));
1482 (void) fprintf(
STDOUT,
"const I_TYPE START = 1LL;\n" );
1483 (void) fprintf(
STDOUT,
"const I_TYPE STOP = 0LL;\n\n" );
1485 cst = 3.14159265358979323846264338327950288L;
1486 (void) fprintf(
STDOUT,
"const R_TYPE _pi_ = %1.15Lf;\n", cst);
1487 cst = 1.57079632679489661923132169163975144L;
1488 (void) fprintf(
STDOUT,
"const R_TYPE _pi2_ = %1.15Lf;\n", cst);
1489 cst = 0.78539816339744830961566084581987572L;
1490 (void) fprintf(
STDOUT,
"const R_TYPE _pi4_ = %1.16Lf;\n", cst);
1491 cst = 0.39269908169872415480783042290993786L;
1492 (void) fprintf(
STDOUT,
"const R_TYPE _pi8_ = %1.16Lf;\n", cst);
1493 cst = 6.28318530717958647692528676655900576L;
1494 (void) fprintf(
STDOUT,
"const R_TYPE _2pi_ = %1.15Lf;\n", cst);
1495 cst = 2.71828182845904523536028747135266250L;
1496 (void) fprintf(
STDOUT,
"const R_TYPE _e_ = %1.15Lf;\n\n", cst);
1498 cst = 3.14159265358979323846264338327950288L;
1499 (void) fprintf(
STDOUT,
"const H_PREC _PI_ = %1.18LfL;\n", cst);
1500 cst = 1.57079632679489661923132169163975144L;
1501 (void) fprintf(
STDOUT,
"const H_PREC _PI2_ = %1.18LfL;\n", cst);
1502 cst = 0.78539816339744830961566084581987572L;
1503 (void) fprintf(
STDOUT,
"const H_PREC _PI4_ = %1.19LfL;\n", cst);
1504 cst = 0.39269908169872415480783042290993786L;
1505 (void) fprintf(
STDOUT,
"const H_PREC _PI8_ = %1.19LfL;\n", cst);
1506 cst = 6.28318530717958647692528676655900576L;
1507 (void) fprintf(
STDOUT,
"const H_PREC _2PI_ = %1.18LfL;\n", cst);
1508 cst = 2.71828182845904523536028747135266250L;
1509 (void) fprintf(
STDOUT,
"const H_PREC _E_ = %1.18LfL;\n\n", cst);
1511 (void) fprintf(
STDOUT,
"const R_TYPE EPSILON = %.1e;", 2.0*pow(10.0, -(
double) DBL_DIG));
1512 (void) fprintf(
STDOUT,
"%54s /* used as 'small' number */\n\n",
" " );
1513 (void) fprintf(
STDOUT,
"\n/* *** DECLARE GLOBAL CONSTANTS *** ");
1514 (void) fprintf(
STDOUT,
"(not to be used outside of this code, use corresponding macros defined above instead) %s */\n\n",
multiple(
'*', 5L));
1517 (void) strcpy(spc,
"");
1519 (void) strcpy(spc,
" ");
1527 (void) fprintf(
STDOUT,
" { ");
1531 (void) fprintf(
STDOUT,
", ");
1535 factor =
GCD(rate1, rate2);
1539 (void) fprintf(
STDOUT,
"FS");
1542 (void) fprintf(
STDOUT,
"(FS*%.1fL)/%.1fL", rate1, rate2);
1544 (void) fprintf(
STDOUT,
"FS*%.1fL", rate1);
1546 (void) fprintf(
STDOUT,
"FS/%.1fL", rate2);
1550 (void) fprintf(
STDOUT,
" };\n");
1555 (void) fprintf(
STDOUT,
", " );
1559 (void) fprintf(
STDOUT,
" };\n");
1565 (void) fprintf(
STDOUT,
", " );
1568 (void) fprintf(
STDOUT,
"false");
1570 (void) fprintf(
STDOUT,
"true" );
1573 (void) fprintf(
STDOUT,
" };\n\n");
1576 (void) fprintf(
STDOUT,
"%*s = ", 33-len,
" ");
1578 (void) fprintf(
STDOUT,
"%*s = ", 30-len,
" ");
1581 (void) fprintf(
STDOUT,
"\n " );
1583 (void) fprintf(
STDOUT,
" \"" );
1586 (void) fprintf(
STDOUT,
"\\\\" );
1591 (void) fprintf(
STDOUT,
"\";\n");
1594 (void) fprintf(
STDOUT,
"%*s= ", 33-len,
" ");
1596 (void) fprintf(
STDOUT,
"\n " );
1600 (void) fprintf(
STDOUT,
"\n" );
1602 (void) fprintf(
STDOUT,
"\n/* *** DECLARE GLOBAL VARIABLES *** " );
1603 (void) fprintf(
STDOUT,
"(not to be used outside of this code, use corresponding macros defined above instead) %s */\n\n",
multiple(
'*', 5L));
1604 (void) fprintf(
STDOUT,
"char napa_cwd[128] = \"Unknown\";\n\n");
1605 (void) fprintf(
STDOUT,
"int napa_waypoint = -1;\n\n" );
1608 (void) fprintf(
STDOUT,
"long napa_segment = 0L;\n" );
1610 (void) fprintf(
STDOUT,
"int napa_segment_run_%-2ld = true;\n", seg );
1617 (void) fprintf(
STDOUT,
"R_TYPE napa_fs_ext = 1.0;\n" );
1618 (void) fprintf(
STDOUT,
"R_TYPE napa_ts_ext = 1.0;\n" );
1622 (void) fprintf(
STDOUT,
"\nI_TYPE napa_tool_index = 0LL;\n\n" );
1624 (void) fprintf(
STDOUT,
"\n");
1626 (void) fprintf(
STDOUT,
"H_PREC napa_abs_loop = 0.0L;\n" );
1628 (void) fprintf(
STDOUT,
"H_PREC napa_rel_loop = 0.0L;\n\n" );
1630 (void) fprintf(
STDOUT,
"H_PREC napa_abs_time = 0.0L;\n" );
1631 (void) fprintf(
STDOUT,
"H_PREC napa_ref_time = 0.0L;\n" );
1633 (void) fprintf(
STDOUT,
"H_PREC napa_rel_time = 0.0L;\n" );
1635 (void) fprintf(
STDOUT,
"\nI_TYPE napa_random_seed = 0LL;\n" );
1636 (void) fprintf(
STDOUT,
"\nlong napa_IO_count = 0L;\n" );
1637 (void) fprintf(
STDOUT,
"IO_RECORD napa_IO_record[%ld];\n\n",
MAXFILES);
1640 (void) fprintf(
STDOUT,
"I_TYPE napa_packet = 1LL;\n" );
1642 (void) fprintf(
STDOUT,
"I_TYPE napa_packet = 0LL;\n" );
1645 (void) fprintf(
STDOUT,
"I_TYPE napa_tool_start = 0LL;\n" );
1648 (void) fprintf(
STDOUT,
"\nclock_t napa_wall_clock = 0;\n\n" );
1650 (void) fprintf(
STDOUT,
"int napa_input_test = 0;\n" );
1651 (void) fprintf(
STDOUT,
"char *napa_input_pointer = (char*) NULL;\n");
1658 (void) fprintf(
STDOUT,
"I_TYPE napa_gateway1 = %ldLL;\n",
Gateway_List.counter - 1L);
1659 (void) fprintf(
STDOUT,
"I_TYPE napa_gateway2 = %ldLL;\n",
1660 ((
long) pow(10.0, floor(log10((
double)
Gateway_List.counter)))));
1664 (void) fprintf(
STDOUT,
"int napa_assert_flag = false;\n" );
1667 (void) fprintf(
STDOUT,
"int napa_dump_flag = false;\n" );
1670 (void) fprintf(
STDOUT,
"int napa_output_flag = false;\n" );
1672 (void) fprintf(
STDOUT,
"int napa_error_flag = false;\n" );
1674 (void) fprintf(
STDOUT,
"\nC_TYPE napa_sim_time[36] = {'\\0'};\n");
1675 (void) fprintf(
STDOUT,
"C_TYPE napa_job_id[32] = {'\\0'};\n");
1676 (void) fprintf(
STDOUT,
"C_TYPE napa_cmd_line[256] = {'\\0'};\n");
1677 (void) fprintf(
STDOUT,
"C_TYPE napa_cmd_parms[256] = {'\\0'};\n");
1680 (void) fprintf(
STDOUT,
"\nMAILBOX_RECORD *napa_msg = (MAILBOX_RECORD*) NULL;\n");
1683 (void) fprintf(
STDOUT,
"MAILBOX_RECORD napa_mailbox[MAILBOX];\n" );
1690 (void) fprintf(
STDOUT,
"\n\n/* *** DECLARE GLOBAL FUNCTION POINTERS %s */\n\n",
multiple(
'*', 87L));
1691 (void) fprintf(
STDOUT,
"I_TYPE (*napa_seed)(I_TYPE) = NULL;\n");
1692 (void) fprintf(
STDOUT,
"I_TYPE (*napa_rand)(void) = NULL;\n");
1693 (void) fprintf(
STDOUT,
"I_TYPE (*napa_root)(I_TYPE) = NULL;\n");
1701 (void) fprintf(
STDOUT,
"\n\n/* *** NAPA FUNCTION PROTOTYPES %s */\n\n",
multiple(
'*', 95L));
1707#if YES == COMPILE_LOOP_OPTION
1708 (void) fprintf(
STDOUT,
"void napa_loop_option(long);\n" );
1710 (void) fprintf(
STDOUT,
"void napa_control_init(void);\n");
1712 (void) fprintf(
STDOUT,
"void napa_tool_setup(void);\n" );
1714 (void) fprintf(
STDOUT,
"\n");
1716 (void) fprintf(
STDOUT,
"void napa_print_usage(const char*, FILE*, long);\n\n");
1718 (void) fprintf(
STDOUT,
"void napa_init(void); %*s%s\n", n,
" ", buffer);
1719 (void) fprintf(
STDOUT,
"void napa_close(void);%*s%s\n", n,
" ", buffer);
1720 (void) fprintf(
STDOUT,
"void napa_end(void);\n" );
1721 (void) fprintf(
STDOUT,
"void napa_exit(int);\n\n" );
1722 (void) fprintf(
STDOUT,
"void napa_timer(long);\n\n");
1724 (void) fprintf(
STDOUT,
"void napa_reset_variables(void);\n" );
1727 (void) fprintf(
STDOUT,
"void napa_reset_nodes(void);\n\n" );
1730 (void) fprintf(
STDOUT,
"void napa_array_setup(IO_COMMAND);\n");
1733 (void) fprintf(
STDOUT,
"void napa_file_banner(void);\n" );
1736 (void) fprintf(
STDOUT,
"void napa_dump_states(void);\n" );
1739 (void) fprintf(
STDOUT,
"void napa_load_states(void);\n" );
1742 (void) fprintf(
STDOUT,
"void napa_check_directives(void);\n" );
1745 (void) fprintf(
STDOUT,
"double *napa_check_for_option(const char*, long, const char*, int);\n" );
1747 (void) fprintf(
STDOUT,
"\nIO_COMMAND napa_IO_manager(IO_COMMAND, FILE**, const char*, const char*, const char*);\n");
1749 (void) fprintf(
STDOUT,
"IO_COMMAND napa_record_manager(IO_COMMAND, DATA_RECORD*, long, long, long, const char*);\n");
1750 (void) fprintf(
STDOUT,
"void napa_record_setup(IO_COMMAND);\n");
1752 (void) fprintf(
STDOUT,
"\n");
1753 (void) fprintf(
STDOUT,
"I_TYPE napa_rand_integer(I_TYPE); %59s /* basic random generator */\n",
" ");
1754 (void) fprintf(
STDOUT,
"\nI_TYPE napa_default_seed(I_TYPE); %59s /* seed generator */\n",
" ");
1755 (void) fprintf(
STDOUT,
"I_TYPE napa_default_root(I_TYPE); %59s /* seed randomizer */\n",
" ");
1756 (void) fprintf(
STDOUT,
"I_TYPE napa_default_rand(void); %59s /* random generator */\n",
" ");
1758 (void) fprintf(
STDOUT,
"\nvoid napa_ping(int);\n" );
1767 char *s = (
char*) NULL;
1770 int len1, len2, len3;
1775 (void) fprintf(
STDOUT,
"\n\n/* *** USER'S FUNCTION COMPILATION DIRECTIVE %s */\n\n",
multiple(
'*', 82L));
1777 (void) fprintf(
STDOUT,
"\n\n/* *** USER'S FUNCTION COMPILATION DIRECTIVES %s */\n\n",
multiple(
'*', 81L));
1802 (void) fprintf(
STDOUT,
"%s %*s /* % 2ld instance in netlist */\n", tok2, 96 - len3 ,
" ",
Function_List[fun].number);
1804 (void) fprintf(
STDOUT,
"%s %*s /* % 2ld instances in netlist */\n", tok2, 96 - len3 ,
" ",
Function_List[fun].number);
1816 (void) fprintf(
STDOUT,
"\n");
1824 (void) fprintf(
STDOUT,
"\n\n/* *** USER'S COMPILATION DIRECTIVES %s */\n\n",
multiple(
'*', 90L));
1843 (void) fprintf(
STDOUT,
"%*s", (
int)
MAX(25L-n, 2L),
" ");
1851 (void) fprintf(
STDOUT,
"%s", tok1);
1854 (void) fprintf(
STDOUT,
"\n");
1863 (void) fprintf(
STDOUT,
"\n");
1872 (void) fprintf(
STDOUT,
"\n");
1886 (void) fprintf(
STDOUT,
"\n/* *** INCLUDE NAPA USER'S HEADER FILE %s */\n\n",
multiple(
'*', 88L));
1888 (void) fprintf(
STDOUT,
"\n/* *** INCLUDE NAPA USER'S HEADER FILES %s */\n\n",
multiple(
'*', 87L));
1891 if (0 == strcmp(
Header_List[h].option,
"expand")) {
1892 (void) fprintf(
STDOUT,
"\n");
1894 (void) fprintf(
STDOUT,
"\n");
1900 (void) fprintf(
STDERR,
" (%s) is not a valid header qualifier\n",
Header_List[h].option);
1901 (void) fprintf(
STDERR,
" valid qualifiers are: (noexpand), (expand)\n");
1904 (void) fprintf(
STDOUT,
"\n\n/* *** DEFAULT PSEUDO-RANDOM NUMBER GENERATOR %s */\n\n",
multiple(
'*', 81L));
1905 (void) fprintf(
STDOUT,
"#if !defined(EXTERNAL_PSEUDO_RANDOM_NUMBER_GENERATOR)\n");
1906 (void) fprintf(
STDOUT,
" #define NAPA_RAND &napa_default_rand %*s /* pointer to function */\n", 58,
" ");
1907 (void) fprintf(
STDOUT,
" #define NAPA_SEED &napa_default_seed %*s /* pointer to function */\n", 58,
" ");
1908 (void) fprintf(
STDOUT,
" #define NAPA_ROOT &napa_default_root %*s /* pointer to function */\n", 58,
" ");
1909 (void) fprintf(
STDOUT,
"#endif\n");
1916 (void) fprintf(
STDOUT,
"\n\n/* *** DECLARATIONS %s */\n\n",
multiple(
'*', 107L));
1918 (void) fprintf(
STDOUT,
"/* (declare I/O's file handles) */\n");
1919 for (i = 0L; i <
Num_IOs; i++) {
1920 (void) fprintf(
STDOUT,
"FILE *napa_fp_%ld = (FILE*) NULL;\n", i );
1922 (void) fprintf(
STDOUT,
"\n");
1925 (void) fprintf(
STDOUT,
"/* (declare array file handles) */\n");
1928 (void) fprintf(
STDOUT,
"FILE *napa_fp_init_%ld = (FILE*) NULL;\n", i );
1931 (void) fprintf(
STDOUT,
"\n");
1934 (void) fprintf(
STDOUT,
"/* (declare ping file handle) */\n");
1935 (void) fprintf(
STDOUT,
"FILE *napa_fp_ping = (FILE*) NULL;\n" );
1936 (void) fprintf(
STDOUT,
"\n");
1939 (void) fprintf(
STDOUT,
"/* (declare dump file handle) */\n");
1940 (void) fprintf(
STDOUT,
"FILE *napa_fp_dump = (FILE*) NULL;\n" );
1941 (void) fprintf(
STDOUT,
"\n");
1949 char *str = (
char*) NULL;
1950 char sgn[2] = {
'\0'};
1957 (void) fprintf(
STDOUT,
"/* (declare node injections) */\n");
1962 (void) fprintf(
STDOUT,
"\n");
1967 if ((0 != strncmp(
Var_List[i].name1,
"$init$", (
size_t) 6))
1968 && (0 != strncmp(
Var_List[i].name1,
"$null$", (
size_t) 6))
1969 && (0 != strncmp(
Var_List[i].name1,
"$declare$", (
size_t) 9))) {
1987 (void) fprintf(
STDOUT,
"/* (declare constants and variables) */\n");
1989 (void) fprintf(
STDOUT,
"/* (declare variables) */\n");
1996 if (0 == strncmp(
Var_List[i].name1,
"$declare$", (
size_t) 9)) {
1998 }
else if ((0 != strncmp(
Var_List[i].name1,
"$init$", (
size_t) 6))
1999 && (0 != strncmp(
Var_List[i].name1,
"$null$", (
size_t) 6))) {
2000 (void) strcpy(v1,
Var_List[i].name1);
2004 (void) fprintf(
STDOUT,
"I_TYPE %s;\n", v1);
2006 (void) fprintf(
STDOUT,
"I_TYPE %s%s_new;\n",
"ivar_",
Var_List[i].name1);
2007 (void) fprintf(
STDOUT,
"I_TYPE %s%s_old;\n",
"ivar_",
Var_List[i].name1);
2011 (void) fprintf(
STDOUT,
"R_TYPE %s;\n", v1);
2017 (void) fprintf(
STDOUT,
"C_TYPE %s[%ld];\n", v1, (
int) strlen(
Var_List[i].value) - 1L);
2030 (void) fprintf(
STDERR,
" <%s>: this node is not allowed to be initialized\n",
Node_List[m].name1);
2031 (void) snprintf(buf, (
size_t) 31,
"$null$_%ld",
Num_Nulls);
2038 (void) fprintf(
STDERR,
" the initialization of <%s> has no effect, as this node is not\n",
Node_List[m].name1);
2039 (void) fprintf(
STDERR,
" - the output of any 'delay' node or delayed node\n");
2040 (void) fprintf(
STDERR,
" - the input of any user function 'duser', 'iuser', 'dtool' or 'itool'\n");
2041 (void) fprintf(
STDERR,
" - the output of any 'integrator' node\n");
2042 (void) fprintf(
STDERR,
" - the output of any 'latch', 'toggle', 'hold', 'track' or 'register' node\n");
2043 (void) fprintf(
STDERR,
" - part of the expression determining the termination of the simulation\n" );
2058 (void) fprintf(
STDOUT,
"\n");
2070 (void) fprintf(
STDOUT,
"/* (declare arrays) */\n");
2082 (void) fprintf(
STDOUT,
"RAM_R_RECORD %s;\n", v1);
2084 (void) fprintf(
STDOUT,
"RAM_I_RECORD %s;\n", v1);
2089 (void) fprintf(
STDOUT,
"RAM2_R_RECORD %s;\n", v1);
2091 (void) fprintf(
STDOUT,
"RAM2_I_RECORD %s;\n", v1);
2096 (void) fprintf(
STDOUT,
"ROM_R_RECORD %s;\n", v1);
2098 (void) fprintf(
STDOUT,
"ROM_I_RECORD %s;\n", v1);
2103 (void) fprintf(
STDOUT,
"ROM2_R_RECORD %s;\n", v1);
2105 (void) fprintf(
STDOUT,
"ROM2_I_RECORD %s;\n", v1);
2112 (void) fprintf(
STDOUT,
"\n");
2123 (void) fprintf(
STDOUT,
"/* (declare arrays of pointers) */\n");
2130 (void) fprintf(
STDOUT,
"DATA_RECORD %s;\n", v1);
2132 (void) fprintf(
STDOUT,
"\n");
2142 (void) fprintf(
STDOUT,
"/* (declare nodes) */\n");
2155 (void) fprintf(
STDOUT,
"\n");
2164 char sgn[2] = {
'\0'};
2168 char *str = (
char*) NULL;
2169 char *nm = (
char*) NULL;
2173 (void) strcpy(v1, nm);
2176 (void) fprintf(
STDOUT,
"I_TYPE %s;\n", v1);
2184 (void) fprintf(
STDOUT,
"I_TYPE *%s_delay = (I_TYPE*) NULL;\n", v1);
2185 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ptr;\n", nm);
2187 flag = sscanf(tok1,
"%li", &ndel);
2190 (void) fprintf(
STDERR,
" number of digital delays is not a well-formed positive integer <%s>\n", tok1);
2195 (void) fprintf(
STDERR,
" number of digital delays <%ld> must at least equal to 1\n", ndel);
2198 (void) fprintf(
STDOUT,
"I_TYPE %s_delay[%ld];\n", v1, ndel);
2199 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ptr;\n", nm);
2203 (void) fprintf(
STDOUT,
"I_TYPE %s_delay;\n", v1);
2206 (void) fprintf(
STDOUT,
"I_TYPE %s_delay[2];\n", v1);
2209 (void) fprintf(
STDOUT,
"I_TYPE %s_dc;\n", v1);
2212 (void) fprintf(
STDOUT,
"I_TYPE %s_delay;\n", v1);
2219 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_store;\n", nm);
2221 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_store;\n", nm);
2229 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_s;\n", nm);
2237 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_d;\n", nm);
2238 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_r;\n", nm);
2239 (void) fprintf(
STDOUT,
"I_TYPE %s_l;\n", v1);
2246 (void) fprintf(
STDOUT,
"I_TYPE %s_s;\n", v1);
2253 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_store;\n", nm);
2255 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_store;\n", nm);
2260 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_norm;\n", nm);
2267 for (j = 0L; j < (
LENGTH(tok1)); j++) {
2268 if ((
'0' == tok1[j])|| (
'1' == tok1[j])) {
2271 if (
'.' == tok1[j]) {
2277 (void) fprintf(
STDERR,
" pattern descriptor cannot contain more than one '.'\n");
2281 (void) fprintf(
STDOUT,
"I_TYPE %s_clock[%ld];\n", v1,
Node_List[i].ID2);
2282 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ptr1;\n", nm);
2283 if (0 != strcmp(
"1", tok2)) {
2284 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ptr2;\n", nm);
2285 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_width;\n", nm);
2287 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ini;\n", nm);
2290 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_set;\n", nm);
2291 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_rst;\n", nm);
2294 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_ctr;\n", nm);
2309 char sgn[2] = {
'\0'};
2312 char *str = (
char*) NULL;
2313 char *nm = (
char*) NULL;
2318 (void) strcpy(v1, nm);
2321 (void) fprintf(
STDOUT,
"R_TYPE %s;\n", v1);
2329 (void) fprintf(
STDOUT,
"R_TYPE *%s_delay = (R_TYPE*) NULL;\n", v1);
2330 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ptr;\n", nm);
2332 flag = sscanf(tok,
"%li", &ndel);
2335 (void) fprintf(
STDERR,
" number of analog delays is not a well-formed positive integer <%s>\n", tok);
2340 (void) fprintf(
STDERR,
" number of analog delays <%ld> must at least equal to 1\n", ndel);
2343 (void) fprintf(
STDOUT,
"R_TYPE %s_delay[%ld];\n", v1, ndel);
2344 (void) fprintf(
STDOUT,
"P_TYPE pnode_%s_ptr;\n", nm);
2348 (void) fprintf(
STDOUT,
"R_TYPE %s_delay;\n", v1);
2351 (void) fprintf(
STDOUT,
"R_TYPE %s_delay[2];\n", v1);
2354 (void) fprintf(
STDOUT,
"R_TYPE %s_dc;\n", v1);
2357 (void) fprintf(
STDOUT,
"R_TYPE %s_delay;\n", v1);
2360 (void) fprintf(
STDOUT,
"H_PREC hnode_%s_fctr;\n", nm);
2361 (void) fprintf(
STDOUT,
"H_PREC hnode_%s_osc0;\n", nm);
2362 (void) fprintf(
STDOUT,
"H_PREC hnode_%s_osc1;\n", nm);
2363 (void) fprintf(
STDOUT,
"H_PREC hnode_%s_osc2;\n", nm);
2370 if (1 > sscanf(tok,
"%lf", &dtemp1)) {
2387 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_first;\n", nm);
2388 (void) fprintf(
STDOUT,
"H_PREC hnode_%s_freq;\n", nm);
2389 (void) fprintf(
STDOUT,
"H_PREC hnode_%s_phase;\n", nm);
2394 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_g1;\n", nm);
2395 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_g2;\n", nm);
2396 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_rd;\n", nm);
2397 (void) fprintf(
STDOUT,
"R_TYPE dnode_%s_f;\n", nm);
2398 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_ok;\n", nm);
2401 (void) fprintf(
STDOUT,
"I_TYPE inode_%s_ctr;\n", nm);
2413 (void) fprintf(
STDOUT,
"\n\n/* *** MAIN %s */\n\n",
multiple(
'*', 115L));
2414 (void) fprintf(
STDOUT,
"int main(void) {\n\n");
2416 (void) fprintf(
STDOUT,
"\n\n/* *** MAIN **** (Standalone Simulator) %s */\n\n",
multiple(
'*', 87L));
2417 (void) fprintf(
STDOUT,
"int main(int argc, char **argv) {\n\n");
2419 (void) fprintf(
STDOUT,
" C_TYPE str[256] = {'\\0'};\n");
2420 (void) fprintf(
STDOUT,
" int parm;\n");
2422 (void) fprintf(
STDOUT,
"\n /* (command line parsing ) */\n");
2423 (void) fprintf(
STDOUT,
" if ( 2 == argc ) {\n");
2424 (void) fprintf(
STDOUT,
" if ( (0 == strncmp(\"?\", argv[1], (size_t) 1)) || (0 == strncmp(\"-h\", argv[1], (size_t) 2)) ) {\n");
2425 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, YES);\n");
2426 (void) fprintf(
STDOUT,
" exit(EXIT_SUCCESS);\n");
2427 (void) fprintf(
STDOUT,
" }\n");
2428 (void) fprintf(
STDOUT,
" }\n");
2429 (void) fprintf(
STDOUT,
" napa_waypoint = 0;\n\n");
2431 (void) fprintf(
STDOUT,
" (void) snprintf(napa_cmd_parms, (size_t) 255, \"%%s %%s\", argv[0], \"%s\");\n",
Cmdline_String);
2432 (void) fprintf(
STDOUT,
" (void) snprintf(napa_cmd_line, (size_t) 255, \"%%s\", argv[0]);\n");
2433 (void) fprintf(
STDOUT,
" if ( 1 < argc ) {\n");
2434 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
2435 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** No parameter is expected\\n\");\n");
2436 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
2437 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
2438 (void) fprintf(
STDOUT,
" }\n");
2440 (void) fprintf(
STDOUT,
" (void) snprintf(napa_cmd_parms, (size_t) 255, \"%%s %%s\", argv[0], \"%s\");\n",
Cmdline_String);
2441 (void) fprintf(
STDOUT,
" (void) snprintf(napa_cmd_line, (size_t) 255, \"%%s %%s\", argv[0], argv[1]);\n");
2442 (void) fprintf(
STDOUT,
" if ( 2 > argc ) {\n");
2443 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
2444 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The parameter of the simulator is missing.\\n\");\n");
2445 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
2446 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
2447 (void) fprintf(
STDOUT,
" }\n");
2449 (void) fprintf(
STDOUT,
" (void) snprintf(napa_cmd_parms, (size_t) 255, \"%%s %%s\", argv[0], \"%s\");\n",
Cmdline_String);
2450 (void) fprintf(
STDOUT,
" for (parm = 0; parm < argc; parm++) {\n");
2451 (void) fprintf(
STDOUT,
" (void) strcpy(str, napa_cmd_line);\n");
2452 (void) fprintf(
STDOUT,
" (void) snprintf(napa_cmd_line, (size_t) 255, \"%%s %%s\", str, argv[parm]);\n");
2453 (void) fprintf(
STDOUT,
" }\n");
2455 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\");\n");
2456 (void) fprintf(
STDOUT,
" if ( 1 < argc ) {\n");
2457 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Simulator Command Line Error:\\n\\n\\n\");\n" );
2458 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** Expecting %ld parameters instead of %%d !\\n\\n\", argc-1);\n",
Num_Cmdlines);
2459 (void) fprintf(
STDOUT,
" }\n");
2460 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
2461 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
2462 (void) fprintf(
STDOUT,
" }\n");
2469 (void) fprintf(
STDOUT,
"\n");
2471 (void) fprintf(
STDOUT,
" napa_waypoint = 1;\n\n");
2477 char command[256] = {
'\0'};
2480 char *str1 = (
char*) NULL;
2481 char *str2 = (
char*) NULL;
2484 int len1, len2, len3;
2488 (void) fprintf(
STDOUT,
"\nvoid napa_print_usage(const char *com, FILE *fp, long all) {\n");
2489#if (IS_WIN64 == PLATFORM)
2490 (void) fprintf(
STDOUT,
" char str[256] = {'\\0'};\n");
2491 (void) fprintf(
STDOUT,
" int n;\n");
2492 (void) fprintf(
STDOUT,
" for (n = 0; n < ((int) strlen(com)); n++) {\n");
2493 (void) fprintf(
STDOUT,
" if ( '/' == com[n] ) {\n");
2494 (void) fprintf(
STDOUT,
" str[n] = '\\\\';\n");
2495 (void) fprintf(
STDOUT,
" } else {\n");
2496 (void) fprintf(
STDOUT,
" str[n] = com[n];\n");
2497 (void) fprintf(
STDOUT,
" }\n");
2498 (void) fprintf(
STDOUT,
" }\n");
2499 (void) fprintf(
STDOUT,
" str[n] = '\\0';\n");
2501 (void) strcpy(command,
"str");
2503 (void) strcpy(command,
"com");
2506 (void) fprintf(
STDOUT,
" if ( NO != all ) {\n");
2507 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \"\\n **** NAPA Standalone Simulator,\");\n");
2509 (void) fprintf(
STDOUT,
" }\n");
2513 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" ****\\n\");\n" );
2516 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** %s\\n\");\n", str2);
2518 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" ****\\n\\n\");\n");
2520 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** USAGE: %%s\\n\\n\", %s);\n", command);
2522 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** USAGE: %%s %s\\n\", %s);\n",
Cmdline_String, command);
2525 (void) fprintf(
STDOUT,
" if ( NO != all ) {\n");
2526 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \"\\n **** NAPA Standalone Simulator,\");\n");
2528 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" ****\\n\");\n" );
2529 (void) fprintf(
STDOUT,
" }\n");
2531 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** USAGE: %%s\\n\\n\", %s);\n", command);
2533 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** USAGE: %%s %s\\n\", %s);\n",
Cmdline_String, command);
2537 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" ****\\n\");\n" );
2557 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** %-*s <- [digital]", len1,
Cmdline_List[j].parms);
2560 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** %-*s <- [ analog]", len1,
Cmdline_List[j].parms);
2563 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" **** %-*s <- [ string]", len1,
Cmdline_List[j].parms);
2570 (void) fprintf(
STDOUT,
" ( \\\"%s\\\"%*s)\\n\");\n",
Cmdline_List[j].comment+1, len2-len3-1,
" ");
2572 (void) fprintf(
STDOUT,
" ( %s%*s)\\n\");\n",
Cmdline_List[j].comment, len2-len3-1,
" ");
2575 (void) fprintf(
STDOUT,
"\\n\");\n");
2578 (void) fprintf(
STDOUT,
"\\n\n");
2583 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" ****\\n\");\n");
2587 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \" ****\\n\");\n");
2589 (void) fprintf(
STDOUT,
" (void) fprintf(fp, \"\\n\\n\");\n");
2590 (void) fprintf(
STDOUT,
" return;\n");
2591 (void) fprintf(
STDOUT,
"}\n");
2598 (void) fprintf(
STDOUT,
"\n\n/* *** NAPA SIMULATOR FUNCTIONS %s */\n\n",
multiple(
'*', 95L));
2600 (void) fprintf(
STDOUT,
"void napa_control_init(void) {\n");
2602 (void) fprintf(
STDOUT,
" const struct tm *d;\n");
2603 (void) fprintf(
STDOUT,
" time_t t;\n");
2605 (void) fprintf(
STDOUT,
" srand((unsigned int) (RANDOM_SEED %% ((I_TYPE) RAND_MAX)));\n");
2607 (void) fprintf(
STDOUT,
" t = time((time_t*) NULL);\n");
2608 (void) fprintf(
STDOUT,
" d = localtime(&t);\n");
2609 (void) fprintf(
STDOUT,
" (void) snprintf(napa_sim_time, (size_t) 25, \"%%s\", ctime(&t));\n");
2610 (void) fprintf(
STDOUT,
" (void) snprintf(napa_job_id, (size_t) 31, \"%%4d%%02d%%02d_%%02d%%02d%%02d\",\n");
2611 (void) fprintf(
STDOUT,
" (*d).tm_year+1900, (*d).tm_mon+1, (*d).tm_mday, (*d).tm_hour, (*d).tm_min, (*d).tm_sec);\n");
2613 (void) fprintf(
STDOUT,
" napa_seed = NAPA_SEED;\n");
2614 (void) fprintf(
STDOUT,
" napa_root = NAPA_ROOT;\n");
2615 (void) fprintf(
STDOUT,
" napa_rand = NAPA_RAND;\n");
2616 (void) fprintf(
STDOUT,
" napa_wall_clock = clock();\n");
2618 (void) fprintf(
STDOUT,
" napa_random_seed = napa_seed(RANDOM_SEED);\n");
2620 (void) fprintf(
STDOUT,
" napa_random_seed = napa_seed(0LL);\n" );
2622 (void) fprintf(
STDOUT,
" napa_init();\n");
2623 (void) fprintf(
STDOUT,
" if ( 0 != atexit(napa_end) ) {\n");
2624 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (atexit)\\n\");\n");
2625 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" registering of 'napa_end()' did not succeed\\n\" );\n");
2626 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2627 (void) fprintf(
STDOUT,
" }\n");
2628 (void) fprintf(
STDOUT,
" if ( 0 != atexit(napa_close) ) {\n");
2629 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (atexit)\\n\");\n");
2630 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" registering of 'napa_close()' did not succeed\\n\");\n");
2631 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2632 (void) fprintf(
STDOUT,
" }\n");
2634 (void) fprintf(
STDOUT,
" return;\n");
2635 (void) fprintf(
STDOUT,
"}\n");
2645 (void) fprintf(
STDOUT,
"\nvoid napa_reset_variables(void) {\n");
2647 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\");\n");
2648 (void) fprintf(
STDOUT,
" return;\n");
2649 (void) fprintf(
STDOUT,
"}\n");
2656 double factor, rate1, rate2;
2663 factor =
GCD(rate1, rate2);
2668 (void) fprintf(
STDOUT,
" napa_fsl[%ld] = (FS * %.1fL) / %.1fL;\n", i, rate1, rate2);
2670 (void) fprintf(
STDOUT,
" napa_fsl[%ld] = FS * %.1fL;\n", i, rate1);
2672 (void) fprintf(
STDOUT,
" napa_fsl[%ld] = FS / %.1fL;\n", i, rate2);
2675 (void) fprintf(
STDOUT,
" napa_fsl[%ld] = FS;\n", i);
2697 (void) fprintf(
STDOUT,
"\n\nvoid napa_tool_setup(void) {\n");
2700 (void) fprintf(
STDOUT,
" long mb;\n");
2703 (void) fprintf(
STDOUT,
" napa_packet = 0LL;\n" );
2705 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL;\n", na);
2707 if ((0L == na) && (0L == nb)) {
2708 (void) fprintf(
STDOUT,
" napa_tool_start = 0LL;\n" );
2710 if ((0L != na) && (0L == nb)) {
2711 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL;\n", na);
2713 if ((0L == na) && (0L != nb)) {
2714 (void) fprintf(
STDOUT,
" napa_tool_start = napa_rand_integer(%ldLL);\n", nb);
2716 (void) fprintf(
STDOUT,
" napa_tool_start = (napa_tool_start / %ldLL) * %ldLL;\n", nc, nc);
2719 if ((0L != na) && (0L != nb)) {
2720 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL + napa_rand_integer(%ldLL);\n", na, nb);
2722 (void) fprintf(
STDOUT,
" napa_tool_start = (napa_tool_start / %ldLL) * %ldLL;\n", nc, nc);
2734 (void) fprintf(
STDOUT,
" (void) strcpy(napa_msg->u, \"%s\");\n", v1);
2735 (void) fprintf(
STDOUT,
" (void) strcpy(napa_msg->t, \"%s\");\n",
UserTool_List[i].function);
2741 (void) fprintf(
STDOUT,
" napa_msg->i = START;\n");
2743 (void) fprintf(
STDOUT,
" napa_msg->i = STOP;\n" );
2745 (void) fprintf(
STDOUT,
" napa_msg->o = -1LL;\n" );
2746 (void) fprintf(
STDOUT,
" napa_msg->n = 0L;\n" );
2747 (void) fprintf(
STDOUT,
" napa_msg->store_i = (long*) NULL;\n");
2748 (void) fprintf(
STDOUT,
" napa_msg->store_l = (I_TYPE*) NULL;\n");
2749 (void) fprintf(
STDOUT,
" napa_msg->store_d = (R_TYPE*) NULL;\n");
2750 (void) fprintf(
STDOUT,
" napa_msg->store_s = (C_TYPE**) NULL;\n");
2753 (void) fprintf(
STDOUT,
" for (mb = 0L; mb < %ldL; mb++) {\n",
Num_Tools);
2754 (void) fprintf(
STDOUT,
" napa_msg = &(napa_mailbox[mb]);\n");
2756 (void) fprintf(
STDOUT,
" napa_msg->i = START;\n");
2758 (void) fprintf(
STDOUT,
" napa_msg->i = STOP;\n" );
2760 (void) fprintf(
STDOUT,
" napa_msg->o = -1LL;\n");
2761 (void) fprintf(
STDOUT,
" napa_msg->n = 0L;\n" );
2762 (void) fprintf(
STDOUT,
" napa_msg->store_i = (long*) NULL;\n");
2763 (void) fprintf(
STDOUT,
" napa_msg->store_l = (I_TYPE*) NULL;\n");
2764 (void) fprintf(
STDOUT,
" napa_msg->store_d = (R_TYPE*) NULL;\n");
2765 (void) fprintf(
STDOUT,
" napa_msg->store_s = (C_TYPE**) NULL;\n");
2766 (void) fprintf(
STDOUT,
" }\n");
2769 (void) fprintf(
STDOUT,
" napa_tool_index = napa_packet - 1LL;\n" );
2771 (void) fprintf(
STDOUT,
" return;\n");
2772 (void) fprintf(
STDOUT,
"}\n\n");
2779 long nseg, prev_nseg;
2789 char *str1 = (
char*) NULL;
2790 char *str2 = (
char*) NULL;
2802 if (nseg != prev_nseg) {
2804 (void) fprintf(
STDOUT,
" napa_segment = %ldL;\n", nseg);
2809 if (0 == strncmp(
Var_List[i].name1,
"$null$", (
size_t) 6)) {
2816 if (0 == strcmp(
Var_List[i].value,
"void")) {
2820 if (0 == strcmp(
Var_List[i].value,
" ")) {
2821 (void) strcpy(
Var_List[i].value,
"" );
2828 (void) strcpy(tok,
"DIGITAL_INI");
2831 (void) strcpy(tok,
"ANALOG_INI" );
2834 (void) strcpy(tok,
"");
2844 if (0 == strncmp(
Var_List[i].name1,
"$init$", (
size_t) 6)) {
2845 (void) fprintf(
STDOUT,
" ");
2850 (void) fprintf(
STDOUT,
";\n");
2856 (void) strcpy(v1,
Var_List[n].name1);
2861 (void) fprintf(
STDERR,
" a variable is initialized only during its declaration,\n");
2862 (void) fprintf(
STDERR,
" use the variable definition to initialize <%s>\n",
Var_List[n].name1);
2865 (void) fprintf(
STDOUT,
"%s", v1);
2873 (void) fprintf(
STDERR,
" overwriting previous initialization of node <%s>\n",
Node_List[m].name1);
2879 (void) fprintf(
STDERR,
" at this point, nodes being not yet defined,\n");
2881 (void) fprintf(
STDERR,
" value of <%s> is replaced by DIGITAL_INI\n",
Node_List[m].name1);
2882 (void) fprintf(
STDOUT,
"DIGITAL_INI");
2884 (void) fprintf(
STDERR,
" value of <%s> is replaced by ANALOG_INI\n",
Node_List[m].name1);
2885 (void) fprintf(
STDOUT,
"ANALOG_INI" );
2892 if (0 == strcmp(tok,
"void")) {
2893 (void) fprintf(
STDOUT,
"(void) ");
2895 (void) fprintf(
STDOUT,
"%s = ", tok);
2897 (void) fprintf(
STDERR,
" <%s> is not a defined node\n", tok);
2901 (void) fprintf(
STDOUT,
"%s", tok);
2909 lltemp1 = 1LL << (
Node_List[m1].width - 1L);
2910 lltemp2 = (2LL*lltemp1) - 1LL;
2911 (void) fprintf(
STDOUT,
" init_%s = (init_%s & ( 0X%llXLL))\n", str2, str2, lltemp1);
2912 (void) fprintf(
STDOUT,
" %*s ? (init_%s | (-0X%llXLL))\n", 5 + ((
int) strlen(str2)),
" ", str2, lltemp1);
2913 (void) fprintf(
STDOUT,
" %*s : (init_%s & ( 0X%llXLL));\n", 5 + ((
int) strlen(str2)),
" ", str2, lltemp2);
2915 lltemp1 = (1LL << -
Node_List[m1].width) - 1LL;
2916 (void) fprintf(
STDOUT,
" init_%s &= 0X%llXLL;\n", str2, lltemp1);
2922 }
else if (0 == strncmp(
Var_List[i].name1,
"$declare$", (
size_t) 9)) {
2924 for (j = i+1L; j <
Num_Vars; j++) {
2925 if (0 == strncmp(
Var_List[j].name1,
"$declare$", (
size_t) 9)) {
2932 (void) strcpy(buf, str1);
2934 (void) strcpy(v1,
"" );
2944 (void) fprintf(
STDERR,
"\n Condition ( %s ) is inactivated\n", buf);
2945 (void) fprintf(
STDERR,
" as nodes cannot be tested before being initialized\n");
2950 (void) strcpy(v0, v1);
2952 (void) snprintf(v1, (
size_t) (
LINLENGTH-1L),
"%s%s", v0, tok);
2960 (void) strcpy(buf, str1);
2961 (void) fprintf(
STDOUT,
" if ( !(");
2966 (void) fprintf(
STDOUT,
") ) {\n");
2968 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (declare)\\n\");\n");
2969 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Var_List[i].mline[0]);
2974 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
2978 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n The condition [ %s ] is not satisfied!\\n\");\n", v1);
2979 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
2980 (void) fprintf(
STDOUT,
" }\n");
2984 (void) fprintf(
STDOUT,
"%s", tok);
2991 (void) strcpy(v1,
Var_List[i].name1);
2994 (void) strcpy(v2, v1);
2996 (void) strcpy(v3, v1);
2998 (void) fprintf(
STDOUT,
" %s = ", v1);
3002 (void) fprintf(
STDOUT,
";\n");
3008 (void) strcpy(v1,
Var_List[n].name1);
3010 (void) fprintf(
STDOUT,
"%s", v1);
3022 (void) fprintf(
STDERR,
" Node <%s>: during the initialization of variables, nodes are not yet defined!\n",
Node_List[m].name1);
3023 (void) fprintf(
STDERR,
" You should consider to add an update to the variable <%s>.\n",
Var_List[i].name1);
3026 (void) fprintf(
STDOUT,
"DIGITAL_INI");
3028 (void) fprintf(
STDOUT,
"ANALOG_INI" );
3031 (void) fprintf(
STDOUT,
"%s", tok);
3035 (void) fprintf(
STDOUT,
" %s_old = %s;\n", v3, v3);
3039 (void) strcpy(v1, str2);
3042 lltemp1 = 1LL << (
Var_List[i].width - 1L);
3043 lltemp2 = (2LL*lltemp1) - 1LL;
3044 (void) fprintf(
STDOUT,
" %s = (%s & ( 0X%llXLL))\n", v1, v1, lltemp1);
3045 (void) fprintf(
STDOUT,
" %*s ? (%s | (-0X%llXLL))\n", (
int) strlen(str2),
" ", v1, lltemp1);
3046 (void) fprintf(
STDOUT,
" %*s : (%s & ( 0X%llXLL));\n", (
int) strlen(str2),
" ", v1, lltemp2);
3047 }
else if (0L >
Var_List[i].width) {
3048 lltemp1 = (1LL << -
Var_List[i].width) - 1LL;
3049 (void) fprintf(
STDOUT,
" %s &= 0X%llXLL;\n", v1, lltemp1);
3054 (void) strcpy(v1, str2);
3056 (void) fprintf(
STDOUT,
" (void) strcpy(%s,", v1);
3059 (void) fprintf(
STDOUT,
" \"%s\");\n", tok);
3076 long kd, tp, tpaddr;
3097 (void) fprintf(
STDOUT,
"\nvoid napa_array_setup(IO_COMMAND command) {\n");
3099 (void) fprintf(
STDOUT,
" I_TYPE i;\n");
3101 (void) fprintf(
STDOUT,
" I_TYPE i, j, k;\n");
3102 (void) fprintf(
STDOUT,
" char *p = (char*) NULL;\n");
3103 (void) fprintf(
STDOUT,
" char buffer[%ld] = {'\\0'};\n",
STRLENGTH + 1L);
3104 (void) fprintf(
STDOUT,
" char *string = (char*) NULL;\n");
3105 (void) fprintf(
STDOUT,
" char *tail = (char*) NULL;\n");
3107 (void) fprintf(
STDOUT,
" switch(command) {\n");
3108 (void) fprintf(
STDOUT,
" case ALLOCATE:\n");
3122 (void) strcpy(tok,
Var_List[n].name1);
3123 (void) strcpy(v1, tok);
3125 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENREAD, &napa_fp_%ld, %s, \"\", \"array\");\n", i, v1);
3128 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENREAD, &napa_fp_init_%ld, \"%s\", \"\", \"array\");\n", i, tok);
3135 (void) fprintf(
STDERR,
" size <%s> of array <%s[]> is not a constant nor a variable\n", v1,
Array_List[i].name);
3141 (void) fprintf(
STDERR,
" variable <%s> determining the size of array <%s[]> cannot be updated\n",
3149 (void) fprintf(
STDERR,
" size <%s> of array <%s[]> must be integer type\n", v1,
Array_List[i].name);
3157 (void) fprintf(
STDOUT,
" %s.last = 0.0L;\n", v2);
3159 (void) fprintf(
STDOUT,
" %s.length = %s;\n", v2, v1);
3160 (void) fprintf(
STDOUT,
" if ( 0L >= %s.length ) {\n", v2);
3161 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (array)\\n\");\n");
3162 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Size of array <%s[%%lld]> must be strictly positive\\n\", %s.length);\n",
3164 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3165 (void) fprintf(
STDOUT,
" }\n");
3170 (void) fprintf(
STDOUT,
" %s.flag = (int*) calloc((size_t) %s.length, sizeof (int ));\n", v2, v2);
3171 (void) fprintf(
STDOUT,
" %s.data = (R_TYPE*) calloc((size_t) %s.length, sizeof (R_TYPE));\n", v2, v2);
3172 (void) fprintf(
STDOUT,
" if ( ((int*) NULL == %s.flag) || ((R_TYPE*) NULL == %s.data) ) {\n", v2, v2);
3174 (void) fprintf(
STDOUT,
" %s.flag = (int*) calloc((size_t) %s.length, sizeof (int ));\n", v2, v2);
3175 (void) fprintf(
STDOUT,
" %s.data = (I_TYPE*) calloc((size_t) %s.length, sizeof (I_TYPE));\n", v2, v2);
3176 (void) fprintf(
STDOUT,
" if ( ((int*) NULL == %s.flag) || ((I_TYPE*) NULL == %s.data) ) {\n", v2, v2);
3178 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (array)\\n\");\n");
3179 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" A dynamic memory allocation error occurred when\");\n" );
3180 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" processing RAM array <%s[%%lld]>\\n\", %s.length);\n", v3, v2);
3181 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3182 (void) fprintf(
STDOUT,
" }\n");
3187 (void) fprintf(
STDOUT,
" %s.data = (R_TYPE*) calloc((size_t) %s.length, sizeof (R_TYPE));\n", v2, v2);
3188 (void) fprintf(
STDOUT,
" if ( (R_TYPE*) NULL == %s.data ) {\n", v2);
3190 (void) fprintf(
STDOUT,
" %s.data = (I_TYPE*) calloc((size_t) %s.length, sizeof (I_TYPE));\n", v2, v2);
3191 (void) fprintf(
STDOUT,
" if ( (I_TYPE*) NULL == %s.data ) {\n", v2);
3193 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (array)\\n\");\n");
3194 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" A dynamic memory allocation error occurred when\");\n" );
3195 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" processing ROM array <%s[%%lld]>\\n\", %s.length);\n", v3, v2);
3196 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3197 (void) fprintf(
STDOUT,
" }\n");
3203 (void) fprintf(
STDERR,
" the ROM array <%s> needs an initialization file\n", v3);
3209 (void) fprintf(
STDOUT,
" %s.rw = 0LL;\n", v2);
3212 (void) fprintf(
STDOUT,
" %s.address = 0LL;\n", v2);
3214 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s.length; i++) {\n", v2);
3216 (void) fprintf(
STDOUT,
" %s.flag[i] = false;\n", v2);
3218 (void) fprintf(
STDOUT,
" %s.data[i] = DIGITAL_INI;\n", v2);
3219 (void) fprintf(
STDOUT,
" }\n");
3223 (void) fprintf(
STDOUT,
" %s.rw = 0LL;\n", v2);
3226 (void) fprintf(
STDOUT,
" %s.address = 0LL;\n", v2);
3228 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s.length; i++) {\n", v2);
3230 (void) fprintf(
STDOUT,
" %s.flag[i] = false;\n", v2);
3232 (void) fprintf(
STDOUT,
" %s.data[i] = ANALOG_INI;\n", v2);
3233 (void) fprintf(
STDOUT,
" }\n");
3240 (void) fprintf(
STDOUT,
" %s.rw = 0LL;\n", v2);
3243 (void) fprintf(
STDOUT,
" %s.address = 0LL;\n", v2);
3245 (void) fprintf(
STDOUT,
" i = 0L;\n");
3246 (void) fprintf(
STDOUT,
" k = 1L;\n");
3247 (void) fprintf(
STDOUT,
" p = fgets(buffer, %ld, napa_fp_init_%ld);\n",
STRLENGTH, i);
3248 (void) fprintf(
STDOUT,
" while ( ((char*) NULL != p) && (i < %s.length) ) {\n", v2);
3249 (void) fprintf(
STDOUT,
" string = buffer;\n");
3250 (void) fprintf(
STDOUT,
" if ( '#' != *string ) {\n");
3251 (void) fprintf(
STDOUT,
" while ( (int) isspace(*string) ) {\n");
3252 (void) fprintf(
STDOUT,
" string++;\n");
3253 (void) fprintf(
STDOUT,
" }\n");
3254 (void) fprintf(
STDOUT,
" if ( '\\0' == *string ) {\n");
3255 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\\n\");\n", v3);
3256 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> array file <\\\"%s\\\">, at line %%lld\\n\", k);\n",
Array_List[i].fname);
3257 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" line is empty\\n\");\n");
3258 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3259 (void) fprintf(
STDOUT,
" }\n");
3260 (void) fprintf(
STDOUT,
" j = strtoll(string, &tail, 0);\n" );
3261 (void) fprintf(
STDOUT,
" string = tail;\n");
3262 (void) fprintf(
STDOUT,
" while ( (int) isspace(*string) ) {\n");
3263 (void) fprintf(
STDOUT,
" string++;\n");
3264 (void) fprintf(
STDOUT,
" }\n");
3265 (void) fprintf(
STDOUT,
" if ( '\\0' == *string ) {\n");
3266 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\\n\");\n", v3);
3267 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> array file <\\\"%s\\\">, at line %%lld\\n\", k);\n",
Array_List[i].fname);
3268 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" data is missing\\n\");\n");
3269 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3270 (void) fprintf(
STDOUT,
" }\n");
3273 (void) fprintf(
STDOUT,
" if ( 2 > sscanf(buffer, \"%%lli %%lli\", &j, &(%s.data[i])) ) {\n", v2);
3276 (void) fprintf(
STDOUT,
" if ( 2 > sscanf(buffer, \"%%lli %%lf\", &j, &(%s.data[i])) ) {\n", v2);
3279 (void) fprintf(
STDOUT,
" if ( 2 > sscanf(buffer, \"%%lli 0x%%llx\", &j, &(%s.data[i])) ) {\n", v2);
3284 (void) fprintf(
STDOUT,
" break;\n");
3285 (void) fprintf(
STDOUT,
" }\n");
3288 (void) fprintf(
STDOUT,
" %s.flag[i] = false;\n", v2);
3290 (void) fprintf(
STDOUT,
" if ( i != j ) {\n");
3291 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\\n\");\n", v3);
3294 (void) fprintf(
STDERR,
" the initialization file of the array <%s>", v3);
3295 (void) fprintf(
STDERR,
" cannot be parameterized by a variable\n");
3297 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> array file <\\\"%s\\\">, at line %%lld\\n\", k);\n",
3300 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" data is not properly numbered\\n\");\n");
3301 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3302 (void) fprintf(
STDOUT,
" }\n");
3303 (void) fprintf(
STDOUT,
" i++;\n");
3304 (void) fprintf(
STDOUT,
" }\n");
3305 (void) fprintf(
STDOUT,
" k++;\n");
3306 (void) fprintf(
STDOUT,
" p = fgets(buffer, %ld, napa_fp_init_%ld);\n",
STRLENGTH, i);
3307 (void) fprintf(
STDOUT,
" }\n");
3308 (void) fprintf(
STDOUT,
" if ( %s.length != i ) {\n", v2);
3309 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\\n\");\n", v3);
3310 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> array file <\\\"%s\\\"> contains %%lld numbers,\\n\", i);\n", v3);
3311 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" but declaration of <%s[]> asked for\");\n",
Array_List[i].name );
3312 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%lld coefficients...\\n\", %s.length);\n", v2);
3313 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3314 (void) fprintf(
STDOUT,
" }\n");
3319 (void) strcpy(tok,
Var_List[n].name1);
3320 (void) strcpy(v2, tok);
3322 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_init_%ld, %s, \"\", \"array\");\n", i, v3);
3325 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_init_%ld, \"%s\", \"\", \"array\");\n", i, tok);
3329 (void) fprintf(
STDOUT,
" break;\n");
3330 (void) fprintf(
STDOUT,
" case FREE:\n");
3344 (void) fprintf(
STDOUT,
" free(%s.flag);\n", v2);
3345 (void) fprintf(
STDOUT,
" %s.flag = (int*) NULL;\n", v2);
3347 (void) fprintf(
STDOUT,
" free(%s.data);\n", v2);
3348 (void) fprintf(
STDOUT,
" %s.data = (I_TYPE*) NULL;\n", v2);
3350 (void) fprintf(
STDOUT,
" break;\n");
3351 (void) fprintf(
STDOUT,
" case RESET:\n");
3352 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\\n\");\n", v3);
3356 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" no reset possible for digital arrays\\n\");\n");
3359 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" no reset possible for analog arrays\\n\");\n" );
3364 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3365 (void) fprintf(
STDOUT,
" case DEBUG:\n");
3382 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: (digital array) <%s>)\\n\");\n",
Array_List[i].name);
3383 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" simulation loop # %%lld\\n\", LOOP_INDEX);\n");
3385 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s.length; i++) {\n", v2);
3386 (void) fprintf(
STDOUT,
" if ( !%s.flag[i] ) {;\n", v2);
3387 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %s[%%3lld] = ?\\n\", i);\n",
Array_List[i].name);
3388 (void) fprintf(
STDOUT,
" } else {\n");
3389 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %s[%%3lld] = %% lld\\n\", i, %s.data[i]);\n",
Array_List[i].name, v2);
3390 (void) fprintf(
STDOUT,
" }\n");
3391 (void) fprintf(
STDOUT,
" }\n");
3393 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s.length; i++) {\n", v2);
3394 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %s[%%3lld] = %% lld\\n\", i, %s.data[i]);\n",
Array_List[i].name, v2);
3395 (void) fprintf(
STDOUT,
" }\n");
3399 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: (analog array) <%s>)\\n\");\n",
Array_List[i].name);
3400 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" simulation loop # %%lld\\n\", LOOP_INDEX);\n");
3402 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s.length; i++) {\n", v2);
3403 (void) fprintf(
STDOUT,
" if ( !%s.flag[i] ) {;\n", v2);
3404 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %s[%%3lld] = ?\\n\", i);\n",
Array_List[i].name);
3405 (void) fprintf(
STDOUT,
" } else {\n");
3406 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %s[%%3lld] = %% 14e\\n\", i, %s.data[i]);\n",
Array_List[i].name, v2);
3407 (void) fprintf(
STDOUT,
" }\n");
3408 (void) fprintf(
STDOUT,
" }\n");
3410 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s.length; i++) {\n", v2);
3411 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %s[%%3lld] = %% 14e\\n\", i, %s.data[i]);\n",
Array_List[i].name, v2);
3412 (void) fprintf(
STDOUT,
" }\n");
3419 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\");\n");
3420 (void) fprintf(
STDOUT,
" break;\n");
3421 (void) fprintf(
STDOUT,
" default:\n");
3422 (void) fprintf(
STDOUT,
" break;\n");
3423 (void) fprintf(
STDOUT,
" }\n" );
3424 (void) fprintf(
STDOUT,
" return;\n" );
3425 (void) fprintf(
STDOUT,
"}\n" );
3431 long i, j, nr, nc, sz;
3435 char *s = (
char*) NULL;
3436 char *s1 = (
char*) NULL;
3437 char *s2 = (
char*) NULL;
3438 char sgn[2] = {
'\0'};
3447 (void) fprintf(
STDOUT,
"\nvoid napa_record_setup(IO_COMMAND command) {\n");
3458 (void) fprintf(
STDOUT,
" %*s /* transfer of parameters by name %*s */\n", 76-len,
" ", 15,
" ");
3461 (void) fprintf(
STDOUT,
" %*s /* transfer of parameters by position %*s */\n", 76-len,
" ", 11,
" ");
3463 (void) fprintf(
STDOUT,
" { {");
3470 len = 1 + ((int) (
MAX(strlen(tok1), strlen(tok2)) - strlen(tok1)));
3475 (void) fprintf(
STDOUT,
",");
3476 (void) fprintf(
STDOUT,
"\n %s",
" ");
3479 (void) snprintf(tok, (
size_t) (
STRLENGTH-1L),
"\"%s\"", tok1);
3481 (void) fprintf(
STDOUT,
"%*s%s", len,
" ", tok );
3483 (void) fprintf(
STDOUT,
",%*s%s", len,
" ", tok );
3487 (void) fprintf(
STDOUT,
" },\n" );
3488 (void) fprintf(
STDOUT,
" {");
3495 len = 1 + ((int) (
MAX(strlen(tok1), strlen(tok2)) - strlen(tok2)));
3500 (void) fprintf(
STDOUT,
"," );
3501 (void) fprintf(
STDOUT,
"\n %s",
" ");
3504 (void) snprintf(tok, (
size_t) (
STRLENGTH-1L),
"\"%s\"", tok2);
3506 (void) fprintf(
STDOUT,
"%*s%s", len,
" ", tok );
3508 (void) fprintf(
STDOUT,
",%*s%s", len,
" ", tok );
3512 (void) fprintf(
STDOUT,
" } };\n");
3523 (void) fprintf(
STDOUT,
" (void) napa_record_manager(command, &%s, %2ldL, %2ldL, %2ldL, \"%s\");\n", v1, sz, nr, nc,
Record_List[i].name);
3525 (void) fprintf(
STDOUT,
" switch (command) {\n");
3526 (void) fprintf(
STDOUT,
" case ALLOCATE:\n" );
3543 (void) strcpy(v2, tok);
3546 (void) fprintf(
STDOUT,
" %s.i_ptr[%2ld] = &%s;\n", v1, j, v2);
3548 (void) fprintf(
STDOUT,
" %s.d_ptr[%2ld] = &%s;\n", v1, j, v2);
3550 (void) fprintf(
STDOUT,
" %s.c_ptr[%2ld] = %s;\n", v1, j, v2);
3555 (void) fprintf(
STDOUT,
" %s.nflag = false;\n", v1);
3557 (void) fprintf(
STDOUT,
" %s.nflag = true;\n", v1);
3560 (void) fprintf(
STDOUT,
" %s.pflag = false;\n", v1);
3562 (void) fprintf(
STDOUT,
" %s.pflag = true;\n", v1);
3565 (void) fprintf(
STDOUT,
" break;\n" );
3566 (void) fprintf(
STDOUT,
" case RESET:\n");
3567 (void) fprintf(
STDOUT,
" case FREE:\n" );
3568 (void) fprintf(
STDOUT,
" break;\n" );
3569 (void) fprintf(
STDOUT,
" case DEBUG:\n");
3570 (void) fprintf(
STDOUT,
" if ( (3 > napa_waypoint) || (5 < napa_waypoint) ) {\n");
3571 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: (array of pointers)\\n\\n\");\n");
3572 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" simulation loop # %%lld\\n\", LOOP_INDEX);\n");
3573 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" the pointers of all arrays are currently pointing to NULL\\n\");\n");
3574 (void) fprintf(
STDOUT,
" break;\n" );
3575 (void) fprintf(
STDOUT,
" }\n");
3590 len =
MAX((
int) strlen(tok), len);
3593 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: (array of pointers: %s[%ld])\\n\\n\");\n",
3595 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" simulation loop # %%lld\\n\", LOOP_INDEX);\n");
3604 (void) strcpy(v2, tok);
3607 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" (digital) %-*s = %% lld\\n\", *(%s.i_ptr)[%ld]);\n", len,tok,v1,j);
3609 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" ( analog) %-*s = %% 14e\\n\", *(%s.d_ptr)[%ld]);\n", len,tok,v1,j);
3611 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" ( string) %-*s = \\\"%%s\\\"\\n\", (%s.c_ptr)[%ld]);\n",len,tok,v1,j);
3616 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\");\n");
3617 (void) fprintf(
STDOUT,
" break;\n");
3618 (void) fprintf(
STDOUT,
" default:\n");
3619 (void) fprintf(
STDOUT,
" break;\n");
3620 (void) fprintf(
STDOUT,
" }\n" );
3621 (void) fprintf(
STDOUT,
" return;\n" );
3622 (void) fprintf(
STDOUT,
"}\n" );
3632 (void) fprintf(
STDOUT,
"\n\n/* *** GENERATE WARNINGS ONLY WHEN DIRECTIVES ARE NOT REGISTERED");
3633 (void) fprintf(
STDOUT,
" IN USER DEFINED FUNCTIONS AS EXPECTED %s */\n",
multiple(
'*', 24L));
3634 (void) fprintf(
STDOUT,
"\nvoid napa_check_directives(void) {\n");
3640 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Run Time Warning: ( directive)\\n\");\n");
3641 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Directive_List[d].mline[0]);
3646 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3649 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The directive <%s> is not REGISTERED\\n\\n\");\n",
Directive_List[d].name);
3650 (void) fprintf(
STDOUT,
" napa_timer(1L);\n");
3651 (void) fprintf(
STDOUT,
"#endif\n");
3657 (void) fprintf(
STDOUT,
"#if !defined(DEBUG_MODE_%s_IS_REGISTERED) \n",
Debug_List[d].name );
3658 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Run Time Warning: ( debug)\\n\");\n");
3659 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Debug_List[d].mline[0]);
3664 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3667 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The debugging directive <%s> has no effect in the context\\n\\n\");\n",
3669 (void) fprintf(
STDOUT,
" napa_timer(1L);\n");
3670 (void) fprintf(
STDOUT,
"#endif\n" );
3672 (void) fprintf(
STDOUT,
" return;\n");
3673 (void) fprintf(
STDOUT,
"}\n");
3684 (void) fprintf(
STDOUT,
"\nvoid napa_reset_nodes(void) {\n");
3686 (void) fprintf(
STDOUT,
" long i;\n");
3694 (void) fprintf(
STDOUT,
" napa_segment = %ldL;\n", nseg);
3713 (void) fprintf(
STDOUT,
" return;\n");
3714 (void) fprintf(
STDOUT,
"}\n" );
3720 long j, c, d, n, p, u, v;
3728 char *str = (
char*) NULL;
3729 char *nm = (
char*) NULL;
3733 (void) strcpy(v1, nm);
3737 (void) fprintf(
STDOUT,
" %s = init_%s;\n", v1, nm);
3739 (void) fprintf(
STDOUT,
" %s = DIGITAL_INI;\n", v1 );
3749 (void) strcpy(v3,
"init_");
3752 (void) strcpy(v3,
"DIGITAL_INI");
3758 (void) fprintf(
STDERR,
" the number of delays must be an integer or a digital variable\n");
3764 (void) fprintf(
STDERR,
" the number of delays must be a constant and cannot be updated\n");
3765 (void) fprintf(
STDERR,
" this variable is updated\n\n");
3769 (void) strcpy(v2,
Var_List[v].name1);
3771 (void) fprintf(
STDOUT,
" if ( 1L > %s ) {\n", v2);
3772 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (delay)\\n\");\n");
3774 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[i].mline[0]);
3779 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3783 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The number of delays of node <%s> cannot be smaller than 1\\n\");\n", nm);
3784 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Its current value is <%%lld>\\n\", %s);\n", v2);
3785 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3786 (void) fprintf(
STDOUT,
" }\n");
3787 (void) fprintf(
STDOUT,
" if ( 2 == napa_waypoint ) {\n");
3788 (void) fprintf(
STDOUT,
" %s_delay = (I_TYPE*) malloc((size_t)(%s * sizeof (I_TYPE)));\n", v1, v2);
3789 (void) fprintf(
STDOUT,
" if ((I_TYPE*) NULL == %s_delay) {\n", v1 );
3790 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (delay)\\n\");\n" );
3792 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[i].mline[0]);
3797 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3801 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Dynamic memory allocation error for node <%s>\\n\");\n",
Node_List[i].name1);
3802 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3803 (void) fprintf(
STDOUT,
" }\n");
3804 (void) fprintf(
STDOUT,
" }\n");
3805 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s; i++) {\n", v2 );
3806 (void) fprintf(
STDOUT,
" %s_delay[i] = %s;\n", v1, v3);
3807 (void) fprintf(
STDOUT,
" }\n");
3808 (void) fprintf(
STDOUT,
" pnode_%s_ptr = 1L;\n", nm );
3810 if (1 != sscanf(tok1,
"%li", &ndel)) {
3812 (void) fprintf(
STDERR,
" the number of delays is not a well-formed positive C long integer <%s>\n", tok1);
3815 (void) fprintf(
STDOUT,
" for (i = 0L; i < %ldL; i++) {\n", ndel);
3816 (void) fprintf(
STDOUT,
" %s_delay[i] = %s;\n", v1, v3);
3817 (void) fprintf(
STDOUT,
" }\n");
3818 (void) fprintf(
STDOUT,
" pnode_%s_ptr = 1L;\n", nm );
3826 (void) strcpy(v3,
"init_");
3829 (void) strcpy(v3,
"DIGITAL_INI");
3831 (void) fprintf(
STDOUT,
" %s_delay = %s;\n", v1, v3);
3838 (void) strcpy(v3,
"init_");
3841 (void) strcpy(v3,
"DIGITAL_INI");
3843 (void) fprintf(
STDOUT,
" %s_delay[0] = %s;\n", v1, v3);
3844 (void) fprintf(
STDOUT,
" %s_delay[1] = %s;\n", v1, v3);
3847 (void) fprintf(
STDOUT,
" %s_delay = DIGITAL_INI;\n", v1 );
3851 if ((0 == strcmp(tok1,
"+")) || (0 == strcmp(tok1,
"-"))) {
3857 (void) fprintf(
STDOUT,
" inode_%s_store = DIGITAL_INI;\n", nm);
3859 (void) fprintf(
STDOUT,
" dnode_%s_store = ANALOG_INI;\n", nm);
3866 (void) fprintf(
STDOUT,
" inode_%s_store = DIGITAL_INI;\n", nm);
3868 (void) fprintf(
STDOUT,
" dnode_%s_store = ANALOG_INI;\n", nm);
3876 for (j = 0L; j <
LENGTH(tok1); j++) {
3877 if (
'0' == tok1[j]) {
3878 (void) fprintf(
STDOUT,
" %s_clock[%ldL] = 0LL;\n", v1, c);
3880 }
else if (
'1' == tok1[j]) {
3881 (void) fprintf(
STDOUT,
" %s_clock[%ldL] = 1LL;\n", v1, c);
3883 }
else if (
'.' == tok1[j]) {
3887 (void) fprintf(
STDERR,
" <%c> is not allowed in the pattern descriptor\n", tok1[j]);
3893 (void) fprintf(
STDERR,
" the right part of the pattern descriptor is missing\n" );
3895 if (0 == strcmp(
"1", tok2)) {
3896 (void) fprintf(
STDOUT,
" pnode_%s_ini = %ldL;\n", nm, p);
3897 (void) fprintf(
STDOUT,
" pnode_%s_ptr1 = %dL;\n", nm, 0);
3900 (void) fprintf(
STDOUT,
" pnode_%s_ini = %ldL;\n", nm, p);
3901 (void) fprintf(
STDOUT,
" pnode_%s_ptr1 = %dL;\n", nm, 0);
3902 (void) fprintf(
STDOUT,
" pnode_%s_ptr2 = %dL;\n", nm, -1);
3903 (void) fprintf(
STDOUT,
" pnode_%s_width = (P_TYPE) %s;\n", nm, tok2);
3906 (void) fprintf(
STDOUT,
" if ( 0L >= pnode_%s_width ) {\n", nm );
3907 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (%s)\\n\");\n",
"clock");
3909 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[i].mline[0]);
3914 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
3918 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n the widening of the clock must be a strictly positive integer\\n\");\n");
3919 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
3920 (void) fprintf(
STDOUT,
" }\n");
3926 (void) fprintf(
STDOUT,
" inode_%s_set = DIGITAL_INI;\n", nm);
3927 (void) fprintf(
STDOUT,
" inode_%s_rst = DIGITAL_INI;\n", nm);
3930 (void) fprintf(
STDOUT,
" inode_%s_ctr = DIGITAL_INI;\n", nm);
3949 char sgn[2] = {
'\0'};
3950 char *str = (
char*) NULL;
3951 char *nm = (
char*) NULL;
3956 (void) strcpy(v1, nm);
3960 (void) fprintf(
STDOUT,
" %s = init_%s;\n", v1, nm);
3962 (void) fprintf(
STDOUT,
" %s = ANALOG_INI;\n", v1 );
3972 (void) strcpy(v3,
"init_");
3975 (void) strcpy(v3,
"ANALOG_INI");
3981 (void) fprintf(
STDERR,
" the number of delays must be an integer or a digital variable\n");
3987 (void) fprintf(
STDERR,
" the number of delays must be a constant and cannot be updated\n");
3988 (void) fprintf(
STDERR,
" this variable is updated\n\n");
3992 (void) strcpy(v2,
Var_List[v].name1);
3994 (void) fprintf(
STDOUT,
" if ( 1L > %s ) {\n", v2);
3995 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (delay)\\n\");\n");
3997 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[i].mline[0]);
4002 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
4006 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The number of delays of node <%s> cannot be smaller than 1\\n\");\n", nm);
4007 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Its current value is <%%lld>\\n\", %s);\n", v2);
4008 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
4009 (void) fprintf(
STDOUT,
" }\n");
4010 (void) fprintf(
STDOUT,
" if ( 2 == napa_waypoint ) {\n");
4011 (void) fprintf(
STDOUT,
" %s_delay = (R_TYPE*) malloc((size_t)(%s * sizeof (R_TYPE)));\n", v1, v2);
4012 (void) fprintf(
STDOUT,
" if ( (R_TYPE*) NULL == %s_delay ) {\n", v1 );
4013 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (delay)\\n\");\n");
4015 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
Node_List[i].mline[0]);
4020 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
4024 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Dynamic memory allocation error for node <%s>\\n\");\n",
Node_List[i].name1);
4025 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
4026 (void) fprintf(
STDOUT,
" }\n");
4027 (void) fprintf(
STDOUT,
" }\n");
4028 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s; i++) {\n", v2);
4029 (void) fprintf(
STDOUT,
" %s_delay[i] = %s;\n", v1, v3);
4030 (void) fprintf(
STDOUT,
" }\n");
4031 (void) fprintf(
STDOUT,
" pnode_%s_ptr = 1L;\n", nm);
4033 if (1 != sscanf(tok1,
"%li", &ndel)) {
4035 (void) fprintf(
STDERR,
" the number of delays is not a well-formed positive C long integer <%s>\n", tok1);
4038 (void) fprintf(
STDOUT,
" for (i = 0L; i < %ldL; i++) {\n", ndel);
4039 (void) fprintf(
STDOUT,
" %s_delay[i] = %s;\n", v1, v3);
4040 (void) fprintf(
STDOUT,
" }\n");
4041 (void) fprintf(
STDOUT,
" pnode_%s_ptr = 0L;\n", nm);
4049 (void) strcpy(v3,
"init_");
4052 (void) strcpy(v3,
"ANALOG_INI");
4054 (void) fprintf(
STDOUT,
" %s_delay = %s;\n", v1, v3);
4061 (void) strcpy(v3,
"init_");
4064 (void) strcpy(v3,
"ANALOG_INI");
4066 (void) fprintf(
STDOUT,
" %s_delay[0] = %s;\n", v1, v3);
4067 (void) fprintf(
STDOUT,
" %s_delay[1] = %s;\n", v1, v3);
4070 (void) fprintf(
STDOUT,
" %s_delay = ANALOG_INI;\n", v1);
4077 if (1 > sscanf(tok1,
"%lf", &dtemp1)) {
4078 (void) fprintf(
STDOUT,
" inode_%s_first = true;\n", nm);
4079 (void) fprintf(
STDOUT,
" hnode_%s_freq = ANALOG_INI;\n", nm);
4080 (void) fprintf(
STDOUT,
" hnode_%s_phase = ANALOG_INI;\n", nm);
4084 (void) fprintf(
STDOUT,
" inode_%s_ok = 1LL;\n", nm);
4085 (void) fprintf(
STDOUT,
" dnode_%s_g1 = 0.0;\n", nm);
4086 (void) fprintf(
STDOUT,
" dnode_%s_g2 = 0.0;\n", nm);
4095 (void) fprintf(
STDERR,
" the frequency must be a constant,\n");
4096 (void) fprintf(
STDERR,
" this variable is updated\n\n");
4099 flag = sscanf(v2,
"%lf", &dtemp1);
4102 (void) strcat(v2,
"L");
4108 (void) fprintf(
STDERR,
" the phase must be a constant,\n");
4109 (void) fprintf(
STDERR,
" this variable is updated\n\n" );
4112 flag = sscanf(v3,
"%lf", &dtemp1);
4115 (void) strcat(v3,
"L");
4117 (void) fprintf(
STDOUT,
" hnode_%s_fctr = cosl(_2PI_*%s/((H_PREC) FSL)) * 2.0L;\n", nm, v2);
4119 (void) fprintf(
STDOUT,
" hnode_%s_osc0 = sinl(%s);\n", nm, v3);
4120 (void) fprintf(
STDOUT,
" hnode_%s_osc1 = sinl(%s - (_2PI_*%s/((H_PREC) FSL)));\n", nm, v3, v2);
4121 }
else if (0.0 == dtemp1) {
4122 (void) fprintf(
STDOUT,
" hnode_%s_osc0 = 0.0L;\n", nm );
4123 (void) fprintf(
STDOUT,
" hnode_%s_osc1 = -sinl(_2PI_*%s/((H_PREC) FSL));\n", nm, v2);
4125 (void) fprintf(
STDOUT,
" hnode_%s_osc0 = sinl(%s);\n", nm, v3);
4126 (void) fprintf(
STDOUT,
" hnode_%s_osc1 = sinl(%s - (_2PI_*%s/((H_PREC) FSL)));\n", nm, v3, v2);
4128 (void) fprintf(
STDOUT,
" hnode_%s_osc2 = 0.0L;\n", nm );
4131 (void) fprintf(
STDOUT,
" inode_%s_ctr = DIGITAL_INI;\n", nm );
4146 char *str = (
char*) NULL;
4147 char *nm = (
char*) NULL;
4149 (void) strcpy(v1, nm);
4154 (void) fprintf(
STDOUT,
" %s = DIGITAL_INI;\n", v1);
4155 (void) fprintf(
STDOUT,
" %s_dc = (I_TYPE) (", v1);
4157 (void) fprintf(
STDOUT,
" %s = ANALOG_INI;\n", v1);
4158 (void) fprintf(
STDOUT,
" %s_dc = (R_TYPE) (", v1);
4163 (void) fprintf(
STDOUT,
");\n");
4168 (void) fprintf(
STDERR,
" a node is not allowed as input of a '%s' node,\n",
Node_List[i].tag);
4170 (void) fprintf(
STDERR,
" use a 'ialgebra' node instead.\n");
4172 (void) fprintf(
STDERR,
" use a 'dalgebra' node instead.\n");
4175 (void) strcpy(v2,
Var_List[n].name1);
4177 (void) fprintf(
STDOUT,
"%s", v2);
4180 (void) fprintf(
STDOUT,
"%s", tok);
4184 lltemp1 = 1LL << (
Node_List[i].width - 1L);
4185 lltemp2 = (2LL*lltemp1) - 1LL;
4186 (void) fprintf(
STDOUT,
" %s_dc = (%s_dc & ( 0X%llXLL))\n", v1, v1, lltemp1);
4187 (void) fprintf(
STDOUT,
" %*s ? (%s_dc | (-0X%llXLL))\n", 3 + ((
int) strlen(nm)),
" ", v1, lltemp1);
4188 (void) fprintf(
STDOUT,
" %*s : (%s_dc & ( 0X%llXLL));\n", 3 + ((
int) strlen(nm)),
" ", v1, lltemp2);
4190 lltemp1 = (1LL << -
Node_List[i].width) - 1LL;
4191 (void) fprintf(
STDOUT,
" %s_dc &= 0X%llXLL;\n", v1, lltemp1);
4201 char cc[3] = {
'\0'};
4202 char *str1 = (
char*) NULL;
4205 case 1: (void) strcpy(cc,
"st");
break;
4206 case 2: (void) strcpy(cc,
"nd");
break;
4207 case 3: (void) strcpy(cc,
"rd");
break;
4208 default: (void) strcpy(cc,
"th");
4210 if (0 == strcmp(v1,
"fs")) {
4211 (void) fprintf(
STDOUT,
" if ( 1 != sscanf(argv[%ld], \"%%lf\", &napa_fs_ext) ) {\n", j+1L);
4212 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
4213 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The %ld%s parameter (fs) of the simulator must be an analog number,\\n\");\n", j+1L, cc);
4214 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** the value <%%s> is read instead.\\n\\n\", argv[%ld]);\n", j+1L);
4215 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
4216 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4217 (void) fprintf(
STDOUT,
" }\n");
4218 (void) fprintf(
STDOUT,
" if ( 0.0 >= napa_fs_ext ) {\n");
4219 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
4220 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The %ld%s parameter (fs) must be strictly positive.\\n\\n\");\n", j+1L, cc);
4221 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
4222 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4223 (void) fprintf(
STDOUT,
" }\n");
4224 (void) fprintf(
STDOUT,
" napa_ts_ext = 1.0 / napa_fs_ext;\n");
4227 if (0 == strcmp(v1,
"ts")) {
4228 (void) fprintf(
STDOUT,
" if ( 1 != sscanf(argv[%ld], \"%%lf\", &napa_ts_ext) ) {\n", j+1L);
4229 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
4230 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The %ld%s parameter (ts) of the simulator must be an analog number,\\n\");\n", j+1L, cc);
4231 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** the value <%%s> is read instead.\\n\\n\", argv[%ld]);\n", j+1L);
4232 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
4233 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4234 (void) fprintf(
STDOUT,
" }\n");
4235 (void) fprintf(
STDOUT,
" if ( 0.0 >= napa_ts_ext ) {\n");
4236 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
4237 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The %ld%s parameter (ts) must be strictly positive.\\n\\n\");\n", j+1L, cc);
4238 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
4239 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4240 (void) fprintf(
STDOUT,
" }\n");
4241 (void) fprintf(
STDOUT,
" napa_fs_ext = 1.0 / napa_ts_ext;\n");
4249 (void) fprintf(
STDOUT,
" (void) strcpy(%s, argv[%ld]);\n", v1, j+1L);
4252 (void) fprintf(
STDOUT,
" if ( 1 != sscanf(argv[%ld], \"%%lli\", &%s) ) {\n", j+1L, v1);
4253 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
4255 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The parameter (%s) of the simulator must be an integer number,\\n\");\n",
Var_List[i].name1);
4257 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The %ld%s parameter (%s) of the simulator must be an integer number,\\n\");\n", j+1L, cc,
Var_List[i].name1);
4259 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** the value <%%s> is read instead.\\n\\n\", argv[%ld]);\n", j+1L);
4260 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
4261 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4262 (void) fprintf(
STDOUT,
" }\n");
4264 (void) strcpy(v1, str1);
4267 lltemp1 = 1LL << (
Var_List[i].width - 1L);
4268 lltemp2 = (2LL*lltemp1) - 1LL;
4269 (void) fprintf(
STDOUT,
" %s = (%s & ( 0X%llXLL))\n", v1, v1, lltemp1);
4270 (void) fprintf(
STDOUT,
" %*s ? (%s | (-0X%llXLL))\n", (
int) strlen(str1),
" ", v1, lltemp1);
4271 (void) fprintf(
STDOUT,
" %*s : (%s & ( 0X%llXLL));\n", (
int) strlen(str1),
" ", v1, lltemp2);
4272 }
else if (0L >
Var_List[i].width) {
4273 lltemp1 = (1LL << -
Var_List[i].width) - 1LL;
4274 (void) fprintf(
STDOUT,
" %s &= 0X%llXLL;\n", v1, lltemp1);
4278 (void) fprintf(
STDOUT,
" if ( 1 != sscanf(argv[%ld], \"%%lf\", &%s) ) {\n", j+1L, v1);
4279 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Simulator Command Line Error:\\n\\n\");\n");
4281 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The parameter (%s) of the simulator must be an analog number,\\n\");\n",
4284 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** The %ld%s parameter (%s) of the simulator must be an analog number,\\n\");\n",
4287 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** the value <%%s> is read instead.\\n\\n\", argv[%ld]);\n", j+1L);
4288 (void) fprintf(
STDOUT,
" napa_print_usage(argv[0], stderr, NO);\n");
4289 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4290 (void) fprintf(
STDOUT,
" }\n");
4303 (void) fprintf(
STDOUT,
"\n /* (load init file) */\n");
4304 (void) fprintf(
STDOUT,
" napa_load_states();\n");
4313 (void) fprintf(
STDOUT,
"\nvoid napa_load_states(void) {\n");
4314 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Information (load)\\n\");\n");
4315 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Loading data at initialization from file <%s>\");\n",
Load_List.fname);
4317 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\\n\");\n");
4318 (void) fprintf(
STDOUT,
" return;\n");
4319 (void) fprintf(
STDOUT,
"}\n");
4330 char sgn[2] = {
'\0'};
4331 char *nm = (
char*) NULL;
4332 char *str = (
char*) NULL;
4338 (void) fprintf(
STDOUT,
"\nvoid napa_dump_states(void) {\n");
4340 (void) fprintf(
STDOUT,
" long i;\n");
4342 (void) fprintf(
STDOUT,
" static long n = 0L;\n");
4343 (void) fprintf(
STDOUT,
"#if (defined(DEBUG_MODE_DUMP) || defined(VERBOSE) || defined(ALL_DEBUG))\n");
4344 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: ( *** DUMP *** )\");\n");
4345 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" As requested by user, dumping simulation data at loop");
4346 (void) fprintf(
STDOUT,
" -> #%%Lg\\n\\n\", napa_abs_loop);\n");
4347 (void) fprintf(
STDOUT,
"#endif\n");
4348 (void) fprintf(
STDOUT,
" if ( EOF == fflush((FILE*) NULL) ) {\n");
4349 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (dump)\");\n");
4350 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Flushing data from buffers I/O was not successful\\n\");\n");
4351 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
4352 (void) fprintf(
STDOUT,
" }\n");
4353 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* *** %%118s *** */\\n\", \" \");\n");
4354 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\\n\", \" \");\n");
4355 (void) fprintf(
STDOUT,
" if ( 0L == n ) {\n");
4356 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#if ((!defined DUMP) || (%%ld == DUMP))\\n\", n);\n");
4357 (void) fprintf(
STDOUT,
" } else {\n");
4358 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#if (%%ld == DUMP)\\n\", n);\n" );
4359 (void) fprintf(
STDOUT,
" } \n");
4360 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #define DUMP_FLAG\\n\\n\");\n" );
4361 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" (void) fprintf(stderr, \\\" with %%ld == DUMP\\\");\\n\\n\", n);\n");
4363 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #if !defined(NO_GLOBAL)\\n\");\n");
4364 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_abs_time = %% .15LeL;\\n\", napa_abs_time);\n");
4366 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_ref_time = %% .15LeL;\\n\", napa_abs_time);\n");
4368 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_ref_time = %% .15LeL;\\n\", napa_ref_time);\n");
4371 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_rel_time = %% .15LeL;\\n\", napa_rel_time);\n");
4373 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_abs_loop = %% .15LeL;\\n\", napa_abs_loop);\n");
4375 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_rel_loop = %% .15LeL;\\n\", napa_rel_loop);\n");
4377 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #endif\\n\\n\");\n");
4379 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #if !defined(NO_TOOL)\\n\");\n");
4380 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_tool_index = %% lldLL\\n\", napa_tool_index);\n");
4381 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" napa_packet = %% lldLL\\n\", napa_packet );\n");
4382 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #endif\\n\\n\");\n");
4385 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #if !defined(NO_ARRAY)\\n\");\n");
4393 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.last = %% .1lld;\\n\", (I_TYPE) %s.last);\n", v1, v1);
4395 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.length = %% lldLL;\\n\", %s.length);\n", v1, v1);
4397 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.address = %% lldLL;\\n\", %s.address);\n", v1, v1);
4400 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.rw = %% lldLL;\\n\", %s.rw);\n", v1, v1);
4402 (void) fprintf(
STDOUT,
" for (i = 0L; i < ((long) %s.length); i++) {\n", v1);
4404 (void) fprintf(
STDOUT,
" if ( %s.flag[i] ) {\n", v1);
4405 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.flag[%%3ld] = true;\", i);\n", v1);
4406 (void) fprintf(
STDOUT,
" } else {\n");
4407 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.flag[%%3ld] = false;\", i);\n", v1);
4408 (void) fprintf(
STDOUT,
" }\n");
4412 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.data[%%3ld] = %% lldLL;\\n\", i, %s.data[i]);\n", v1, v1);
4415 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.data[%%3ld] = 0x%%07llxLL;\\n\", i, ABS(%s.data[i]));\n", v1, v1);
4418 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s.data[%%3ld] = %% .15e;\\n\", i, %s.data[i]);\n", v1, v1);
4423 (void) fprintf(
STDOUT,
" }\n");
4425 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #endif\\n\\n\");\n");
4429 if ((0 != strncmp(
Var_List[i].name1,
"$init$", (
size_t) 6))
4430 && (0 != strncmp(
Var_List[i].name1,
"$null$", (
size_t) 6))
4431 && (0 != strncmp(
Var_List[i].name1,
"$declare$", (
size_t) 9))) {
4436 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #if !defined(NO_VAR)\\n\");\n");
4438 if ((0 == strncmp(
Var_List[i].name1,
"$init$", (
size_t) 6))
4439 || (0 == strncmp(
Var_List[i].name1,
"$null$", (
size_t) 6))
4440 || (0 == strncmp(
Var_List[i].name1,
"$declare$", (
size_t) 9))) {
4443 (void) strcpy(v1,
Var_List[i].name1);
4447 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s = %% lldLL;\\n\", %s);\n", v1, v1);
4449 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_new = %% lldLL;\\n\", %s_new);\n", v1, v1);
4450 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_old = %% lldLL;\\n\", %s_old);\n", v1, v1);
4454 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s = %% .15e;\\n\", %s);\n", v1, v1);
4457 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" (void) strcpy(%s, \\\"%%s\\\");\\n\", %s);\n", v1, v1);
4463 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #endif\\n\\n\");\n");
4465 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #if !defined(NO_NODE)\\n\");\n");
4468 (void) strcpy(v1, nm);
4472 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s = %% lldLL;\\n\", %s);\n", v1, v1);
4478 (void) strcpy(v2,
Var_List[v].name1);
4480 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s; i++) {\n", v2);
4481 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[%%ld] = %% lldLL;\\n\", i, %s_delay[i]);\n", v1, v1);
4482 (void) fprintf(
STDOUT,
" }\n");
4483 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_ptr = %% ldL;\\n\", pnode_%s_ptr);\n", nm, nm);
4485 if (1 != sscanf(tok,
"%li", &ndel)) {
4487 (void) fprintf(
STDERR,
" the number of delays is not a well-formed positive C long integer <%s>\n", tok);
4490 (void) fprintf(
STDOUT,
" for (i = 0L; i < %ld; i++) {\n", ndel);
4491 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[%%ld] = %% lldLL;\\n\", i, %s_delay[i]);\n", v1, v1);
4492 (void) fprintf(
STDOUT,
" }\n");
4493 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_ptr = %% ldL;\\n\", pnode_%s_ptr);\n", nm, nm);
4497 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay = %% lldLL;\\n\", %s_delay_0);\n", v1, v1);
4500 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[0] = %% lldLL;\\n\", %s_delay[0]);\n", v1, v1);
4501 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[1] = %% lldLL;\\n\", %s_delay[1]);\n", v1, v1);
4504 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_dc = %% lldLL;\\n\", %s_dc);\n", v1, v1);
4507 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay = %% lldLL;\\n\", %s);\n", v1, v1);
4510 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_set = %% lldLL;\\n\", %s_set);\n", v1, v1);
4511 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_rst = %% lldLL;\\n\", %s_rst);\n", v1, v1);
4516 if ((0 == strcmp(tok,
"+")) || (0 == strcmp(tok,
"-"))) {
4522 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_store = %% lldLL;\\n\", %s_store);\n", v1, v1);
4524 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" dnode_%s_store = %% .15e;\\n\", dnode_%s_store);\n", nm, nm);
4532 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_store = %% lldLL;\\n\", %s_store);\n", v1, v1);
4534 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" dnode_%s_store = %% .15e;\\n\", dnode_%s_store);\n", nm, nm);
4545 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_clock[%ld] = %% lldLL;\\n\", %s_clock[%ld]);\n", v1, n, v1, n);
4548 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_ptr1 = %% ldL;\\n\", pnode_%s_ptr1);\n", nm, nm);
4549 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_ptr2 = %% ldL;\\n\", pnode_%s_ptr2);\n", nm, nm);
4550 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_width = %% ldL;\\n\", pnode_%s_width);\n", nm, nm);
4553 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" inode_%s_ctr = %% lldLL;\\n\", inode_%s_ctr);\n", nm, nm);
4557 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s = %% .15e;\\n\", %s);\n", v1, v1);
4563 (void) strcpy(v2,
Var_List[v].name1);
4565 (void) fprintf(
STDOUT,
" for (i = 0L; i < %s; i++) {\n", v2);
4566 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[%%ld] = %% .15e;\\n\", i, %s_delay[i]);\n", v1, v1);
4567 (void) fprintf(
STDOUT,
" }\n");
4568 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_ptr = %% ldL;\\n\", pnode_%s_ptr);\n", nm, nm);
4570 if (1 != sscanf(tok,
"%li", &ndel)) {
4572 (void) fprintf(
STDERR,
" the number of delays is not a well-formed positive C long integer <%s>\n", tok);
4575 (void) fprintf(
STDOUT,
" for (i = 0L; i < %ld; i++) {\n", ndel);
4576 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[%%ld] = %% .15e;\\n\", i, %s_delay[i]);\n", v1, v1);
4577 (void) fprintf(
STDOUT,
" }\n");
4578 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" pnode_%s_ptr = %% ldL;\\n\", pnode_%s_ptr);\n", nm, nm);
4582 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay = %% .15e;\\n\", %s_delay_0);\n", v1, v1);
4585 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[0] = %% .15e;\\n\", %s_delay[0]);\n", v1, v1);
4586 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay[1] = %% .15e;\\n\", %s_delay[1]);\n", v1, v1);
4589 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_dc = %% lldLL;\\n\", %s_dc);\n", v1, v1);
4592 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %s_delay = %% .15e;\\n\", %s);\n", v1, v1);
4595 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" inode_%s_ctr = %% lldLL;\\n\", inode_%s_ctr);\n", nm, nm);
4598 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" hnode_%s_fctr = %% .21Le;\\n\", hnode_%s_fctr);\n", nm, nm);
4599 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" hnode_%s_osc0 = %% .21Le;\\n\", hnode_%s_osc0);\n", nm, nm);
4600 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" hnode_%s_osc1 = %% .21Le;\\n\", hnode_%s_osc1);\n", nm, nm);
4601 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" hnode_%s_osc2 = %% .21Le;\\n\", hnode_%s_osc2);\n", nm, nm);
4604 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" inode_%s_first = %% lldLL;\\n\", inode_%s_first);\n", nm, nm);
4605 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" hnode_%s_freq = %% .15e;\\n\", hnode_%s_freq);\n", nm, nm);
4606 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" hnode_%s_phase = %% .15e;\\n\", hnode_%s_phase);\n", nm, nm);
4613 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #endif\\n\\n\");\n");
4614 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#endif\\n\\n\");\n" );
4615 (void) fprintf(
STDOUT,
" n++;\n");
4616 (void) fprintf(
STDOUT,
" return;\n");
4617 (void) fprintf(
STDOUT,
"}\n");
4623 (void) fprintf(
STDOUT,
"\n\n/* *** TIMER FUNCTION (freeze for 'num' seconds) %s */\n\n",
multiple(
'*', 78L));
4624 (void) fprintf(
STDOUT,
"void napa_timer(long num) {\n" );
4625 (void) fprintf(
STDOUT,
" time_t time_start, time_stop;\n");
4626 (void) fprintf(
STDOUT,
" if ( 0L < num ) {\n");
4627 (void) fprintf(
STDOUT,
" time_start = time((time_t*) NULL);\n" );
4628 (void) fprintf(
STDOUT,
" do {\n");
4629 (void) fprintf(
STDOUT,
" time_stop = time((time_t*) NULL);\n" );
4630 (void) fprintf(
STDOUT,
" } while ( ((long) (time_stop-time_start)) <= num );\n");
4631 (void) fprintf(
STDOUT,
" }\n");
4632 (void) fprintf(
STDOUT,
" return;\n");
4633 (void) fprintf(
STDOUT,
"}\n");
4639 (void) fprintf(
STDOUT,
"\n\n/* *** EXIT FUNCTIONS %s */\n",
multiple(
'*', 105L));
4640 (void) fprintf(
STDOUT,
"\nvoid napa_end(void) {\n");
4642 (void) fprintf(
STDOUT,
" napa_array_setup(FREE);\n");
4645 (void) fprintf(
STDOUT,
" napa_record_setup(FREE);\n" );
4647 (void) fprintf(
STDOUT,
" if ( !napa_error_flag ) {\n");
4648 (void) fprintf(
STDOUT,
" (void) napa_IO_manager(FREE, (FILE**) NULL, (char*) NULL, (char*) NULL, \"end\");\n" );
4649 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n **** Normal Termination %%25s ****\\n\", \" \");\n");
4650 (void) fprintf(
STDOUT,
" }\n");
4651 (void) fprintf(
STDOUT,
"#if defined(VERBOSE) && defined(NAPA_EXIT_STATUS)\n");
4652 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" **** NAPA Exit Status: %%10s < %%d >");
4653 (void) fprintf(
STDOUT,
" %%9s ****\\n\\n\", \" \", napa_waypoint, \" \");\n");
4654 (void) fprintf(
STDOUT,
"#endif\n" );
4655 (void) fprintf(
STDOUT,
" return;\n");
4656 (void) fprintf(
STDOUT,
"}\n");
4657 (void) fprintf(
STDOUT,
"\nvoid napa_exit(int exit_code) {\n");
4658 (void) fprintf(
STDOUT,
" if ( EOF == fflush((FILE*) NULL) ) {\n");
4659 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (exit)\");\n");
4660 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" flushing data from I/O buffers was not successful\\n\");\n");
4661 (void) fprintf(
STDOUT,
" exit_code = EXIT_FAILURE;\n");
4662 (void) fprintf(
STDOUT,
" }\n");
4663 (void) fprintf(
STDOUT,
" if ( EXIT_FAILURE == exit_code ) {\n");
4664 (void) fprintf(
STDOUT,
" napa_error_flag = true;\n" );
4665 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\\n **** ERROR detected \");\n");
4666 (void) fprintf(
STDOUT,
" switch (napa_waypoint) {\n" );
4668 (void) fprintf(
STDOUT,
" case 0:");
4669 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"before the command line parsing.\" );" );
4670 (void) fprintf(
STDOUT,
" break;\n");
4672 (void) fprintf(
STDOUT,
" case 1:");
4673 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"before the initialization of the simulation.\" );" );
4674 (void) fprintf(
STDOUT,
" break;\n");
4675 (void) fprintf(
STDOUT,
" case 2:");
4676 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"during the 1st part of the initialization of the simulation.\" );" );
4677 (void) fprintf(
STDOUT,
" break;\n");
4678 (void) fprintf(
STDOUT,
" case 3:");
4679 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"during the 2nd part of the initialization of the simulation.\" );" );
4680 (void) fprintf(
STDOUT,
" break;\n");
4681 (void) fprintf(
STDOUT,
" case 4:");
4682 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"at abs_loop #%%.0Lf during the simulation.\", napa_abs_loop);");
4683 (void) fprintf(
STDOUT,
" break;\n");
4684 (void) fprintf(
STDOUT,
" case 5:");
4685 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"at abs_loop #%%.0Lf when simulation is closing.\", napa_abs_loop);");
4686 (void) fprintf(
STDOUT,
" break;\n");
4687 (void) fprintf(
STDOUT,
" case 6:");
4688 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"during the execution of the NAPA exit code.\" );\n");
4689 (void) fprintf(
STDOUT,
" }\n");
4690 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\\n\");\n");
4691 (void) fprintf(
STDOUT,
" TIMER(1L);\n");
4692 (void) fprintf(
STDOUT,
"#if defined(NAPA_EXIT_STATUS)\n");
4693 (void) fprintf(
STDOUT,
" exit(napa_waypoint);\n" );
4694 (void) fprintf(
STDOUT,
"#else\n");
4695 (void) fprintf(
STDOUT,
" exit(EXIT_FAILURE);\n");
4696 (void) fprintf(
STDOUT,
"#endif\n");
4697 (void) fprintf(
STDOUT,
" } else {\n");
4698 (void) fprintf(
STDOUT,
" exit(EXIT_SUCCESS);\n");
4699 (void) fprintf(
STDOUT,
" }\n");
4700 (void) fprintf(
STDOUT,
"}\n");
4706 (void) fprintf(
STDOUT,
" #ifdef __GNUC__\n");
4707 (void) fprintf(
STDOUT,
" /* (current working directory) */\n");
4708 (void) fprintf(
STDOUT,
" if (NULL == getcwd(napa_cwd, 128)) {\n" );
4709 (void) fprintf(
STDOUT,
" (void) strcpy(napa_cwd, \"Unknown\");\n");
4710 (void) fprintf(
STDOUT,
" }\n");
4711 (void) fprintf(
STDOUT,
" #endif\n\n");
4712 (void) fprintf(
STDOUT,
" /* (initialize control) */\n");
4713 (void) fprintf(
STDOUT,
" napa_control_init();\n");
4715 (void) fprintf(
STDOUT,
" napa_check_directives();\n");
4717 (void) fprintf(
STDOUT,
" napa_waypoint = 2;\n");
4724 (void) fprintf(
STDOUT,
"\n /* (initialize tool synchronization) */\n");
4725 (void) fprintf(
STDOUT,
" napa_tool_setup();\n");
4727 (void) fprintf(
STDOUT,
"\n /* (initialize variables) */\n");
4729 (void) fprintf(
STDOUT,
" napa_reset_variables();\n");
4732 (void) fprintf(
STDOUT,
"\n /* (initialize records) */\n");
4733 (void) fprintf(
STDOUT,
" napa_record_setup(ALLOCATE);\n");
4746 (void) fprintf(
STDOUT,
"\n /* (open ping file) */\n");
4750 (void) fprintf(
STDERR,
" <%s> is not a file name but a node\n",
Ping_List.fname);
4756 (void) fprintf(
STDERR,
" <%s> is not a file name\n",
Ping_List.fname);
4760 (void) strcpy(tok,
Var_List[n].name1);
4761 (void) strcpy(v1, tok);
4763 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENWRITE, &napa_fp_ping, %s, \".png\", \"ping\");\n", v1);
4766 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENWRITE, &napa_fp_ping, \"%s\", \".png\", \"ping\");\n", tok);
4778 (void) fprintf(
STDOUT,
"\n /* (open I/O stream) */\n");
4780 (void) fprintf(
STDOUT,
"\n /* (open I/O streams) */\n");
4782 for (i = 0L; i <
Num_IOs; i++) {
4786 (void) fprintf(
STDERR,
" <%s> is not a file name but a node\n",
IO_List[i].fname);
4793 (void) fprintf(
STDERR,
" <%s> is not a file name\n",
IO_List[i].fname);
4799 (void) strcpy(tok,
Var_List[n].name1);
4800 (void) strcpy(v1, tok);
4802 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENWRITE, &napa_fp_%ld, %s, \".out\", \"output\");\n", i, v1);
4804 (void) strcpy(tok,
IO_List[i].fname);
4805 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENWRITE, &napa_fp_%ld, \"%s\", \".out\", \"output\");\n", i, tok);
4809 (void) strcpy(tok,
Var_List[n].name1);
4810 (void) strcpy(v1, tok);
4812 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENREAD, &napa_fp_%ld, %s, \".in\", \"input\");\n", i, v1);
4814 (void) strcpy(tok,
IO_List[i].fname);
4815 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENREAD, &napa_fp_%ld, \"%s\", \".in\", \"input\");\n", i, tok);
4822 (void) fprintf(
STDOUT,
"\n /* (open dump file) */\n");
4827 (void) fprintf(
STDERR,
" <%s> is not a file name\n",
Dump_List.fname);
4834 (void) fprintf(
STDERR,
" <%s> is not a file name\n",
Dump_List.fname);
4837 (void) strcpy(tok,
Var_List[n].name1);
4838 (void) strcpy(v1, tok);
4840 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENWRITE, &napa_fp_dump, %s, \".dmp\", \"dump\");\n", v1);
4843 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(OPENWRITE, &napa_fp_dump, \"%s\", \".dmp\", \"dump\");\n", tok);
4852 (void) fprintf(
STDOUT,
"\n /* (initialize nodes) */\n");
4853 (void) fprintf(
STDOUT,
" napa_reset_nodes();\n");
4855 (void) fprintf(
STDOUT,
" napa_waypoint = 3;\n");
4858 (void) fprintf(
STDOUT,
"\n /* (call user's check function) */\n");
4860 (void) fprintf(
STDOUT,
"\n /* (call user's check functions) */\n");
4864 (void) fprintf(
STDOUT,
"\n /* (call user's initialization function) */\n");
4866 (void) fprintf(
STDOUT,
"\n /* (call user's initialization functions) */\n");
4871 (void) fprintf(
STDOUT,
"\n /* (prepare postprocessing) */\n");
4876 (void) fprintf(
STDOUT,
"\n /* (initialize array) */\n");
4878 (void) fprintf(
STDOUT,
"\n /* (initialize arrays) */\n");
4880 (void) fprintf(
STDOUT,
" napa_array_setup(ALLOCATE);\n");
4901 (void) fprintf(
STDOUT,
" /* (RAM access report) */\n");
4907 (void) strcpy(v1, v0);
4909 (void) fprintf(
STDOUT,
" if ( ISNOTSMALL(%s.last) ) {\n", v1 );
4910 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Information: loop[%%lld] (array)\\n\", (I_TYPE) %s.last );\n", v1);
4911 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Last access to uninitialized data in RAM <%s[%%lld]>\\n\", %s.length);\n", v0, v1);
4912 (void) fprintf(
STDOUT,
" if ( EOF == fflush((FILE*) NULL) ) {\n");
4913 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (array)\");\n");
4914 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Flushing data from buffers I/O was not successful\\n\");\n");
4915 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n" );
4916 (void) fprintf(
STDOUT,
" }\n");
4917 (void) fprintf(
STDOUT,
" }\n");
4919 (void) fprintf(
STDOUT,
"\n");
4927 (void) fprintf(
STDOUT,
" /* (ping function defined in netlist) */\n");
4929 (void) fprintf(
STDOUT,
" /* (ping functions defined in netlist) */\n");
4931 (void) fprintf(
STDOUT,
" napa_ping(true);\n\n");
4940 (void) fprintf(
STDOUT,
"\n /* (ping function defined in netlist) */\n");
4942 (void) fprintf(
STDOUT,
"\n /* (ping functions defined in netlist) */\n");
4944 (void) fprintf(
STDOUT,
" napa_ping(false);\n");
4954 (void) fprintf(
STDOUT,
"\n /* (check output) */\n");
4955 (void) fprintf(
STDOUT,
" if ( !napa_output_flag ) {\n");
4956 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Warning: ( I/O stream)\\n\");\n");
4957 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" there is no explicit output from simulator.\\n\\n\" );\n");
4958 (void) fprintf(
STDOUT,
" }\n");
4969 (void) fprintf(
STDOUT,
"\n\n/* *** PING FUNCTION %s */\n",
multiple(
'*', 106L));
4970 (void) fprintf(
STDOUT,
"\nvoid napa_ping(int always) {");
4972 (void) fprintf(
STDOUT,
"\n");
4974 (void) fprintf(
STDOUT,
" %*s /* localisation of functions identified in the netlist %*s */\n", 27,
" ", 15,
" ");
4976 (void) fprintf(
STDOUT,
" static int done = false;\n");
4977 (void) fprintf(
STDOUT,
" if ( !always && done ) {\n");
4978 (void) fprintf(
STDOUT,
" return;\n");
4979 (void) fprintf(
STDOUT,
" }\n");
4981 if (0 == strcmp(
Ping_List.fname,
"stderr")) {
4982 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\"); /* no function call in user's netlist */\n");
4984 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \"\\n\"); /* no function call in user's netlist */\n");
4986 (void) fprintf(
STDOUT,
" done = true;\n");
4987 (void) fprintf(
STDOUT,
" return;\n" );
4988 (void) fprintf(
STDOUT,
"}\n");
4991 if (0 == strcmp(
Ping_List.fname,
"stderr")) {
4992 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\n\\n\");\n");
4994 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \"\\n\");\n" );
5009 (void) fprintf(
STDOUT,
" %*s /* as defined by macro 'PING( %s )' %*s*/\n", 40-len,
" ",
Function_List[i].table, 37-len,
" ");
5010 (void) fprintf(
STDOUT,
"#else\n" );
5012 (void) fprintf(
STDOUT,
"#endif\n");
5024 (void) fprintf(
STDOUT,
" %*s /* as defined by macro 'PING( %s )' %*s*/\n", 40-len,
" ",
Function_List[i].table, 37-len,
" ");
5025 (void) fprintf(
STDOUT,
"#else\n");
5027 (void) fprintf(
STDOUT,
"#endif\n");
5035 (void) fprintf(
STDOUT,
" done = true;\n");
5036 (void) fprintf(
STDOUT,
" return;\n" );
5037 (void) fprintf(
STDOUT,
"}\n");
5045 (void) fprintf(
STDOUT,
"\n /* (write file banner opening) */\n");
5047 (void) fprintf(
STDOUT,
"\n /* (write file banner openings) */\n");
5049 (void) fprintf(
STDOUT,
" napa_file_banner();\n");
5058 if (0 == strcmp(
"stderr",
IO_List[i].fname)) {
5059 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (time domain output)\\n\");\n", i);
5062 (void) fprintf(
STDOUT,
" #if !defined(NO_BANNER)\n");
5063 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# %%s\\n\", TITLE);\n", i);
5064 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (time domain output ) Sampled at %s\\n\");\n", i, frqs);
5065 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (compiler version ) NAPA %%s\\n\", NAPA_VERSION);\n", i );
5066 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (source file ) \\\"%%s\\\"\\n\", SOURCE);\n", i );
5067 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (random seed ) %%lld\\n\", RANDOM_SEED);\n", i );
5068 (void) fprintf(
STDOUT,
" #if defined(NO_TIME_OUTPUT)\n");
5069 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (number of columns ) %ld\\n#\\n#\\n#\\n#\\n#\\n#\\n#\\n\");\n", i, j );
5070 (void) fprintf(
STDOUT,
" #else\n");
5071 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (number of columns ) %ld\\n#\\n#\\n#\\n#\\n#\\n#\\n#\\n\");\n", i, j+1L);
5072 (void) fprintf(
STDOUT,
" #endif\n");
5073 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# %%s\\n\", CREATED);\n", i);
5074 (void) fprintf(
STDOUT,
" #endif\n");
5083 char *str = (
char*) NULL;
5089 char sgn[2] = {
'\0'};
5090 (void) fprintf(
STDOUT,
" #if defined(NO_TIME_OUTPUT)\n");
5091 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"#\");\n", i);
5092 (void) fprintf(
STDOUT,
" #else\n" );
5093 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# absolute_time \");\n", i);
5094 (void) fprintf(
STDOUT,
" #endif\n");
5102 if (!((0L ==
LENGTH(scale)) ||
5103 ((1L ==
LENGTH(scale)) && (
'_' != scale[0])) ||
5104 ((1L <
LENGTH(scale)) && (
'_' == scale[0])) ||
5105 ((2L <
LENGTH(scale)) && (
'_' != scale[0]) && (
'_' == scale[1])) )) {
5107 (void) fprintf(
STDERR,
" the scaling (%s) of element <%s> of output list is not valid\n", scale, tok1);
5108 (void) fprintf(
STDERR,
" the scaling single letter must be separated from other text by '_'\n");
5110 if ((2L <
LENGTH(scale)) && (
'_' == scale[1])) {
5111 for (p = 2L; p <=
LENGTH(scale); p++) {
5112 scale[p-1L] = scale[p];
5115 if (0 == strcmp(tok1,
"LOOP_INDEX") ) { (void) strcpy(frm,
" LOOP_INDEX" );
5116 }
else if (0 == strcmp(tok1,
"ABS_LOOP_INDEX")) { (void) strcpy(frm,
" ABS_LOOP_INDEX" );
5117 }
else if (0 == strcmp(tok1,
"REL_LOOP_INDEX")) { (void) strcpy(frm,
" REL_LOOP_INDEX" );
5118 }
else if (0 == strcmp(tok1,
"TOOL_INDEX") ) { (void) strcpy(frm,
" TOOL_INDEX" );
5119 }
else if (0 == strcmp(tok1,
"TIME") ) { (void) strcpy(frm,
" absolute_time");
5120 }
else if (0 == strcmp(tok1,
"ABS_TIME") ) { (void) strcpy(frm,
" absolute_time");
5121 }
else if (0 == strcmp(tok1,
"REF_TIME") ) { (void) strcpy(frm,
" reference_time");
5122 }
else if (0 == strcmp(tok1,
"REL_TIME") ) { (void) strcpy(frm,
" relative_time");
5125 (void) snprintf(tok2, (
size_t) (
STRLENGTH-1L),
"%1s", tok1);
5127 if ((0 == strncmp(scale,
"X", (
size_t) 1)) || (0 == strncmp(scale,
"x", (
size_t) 1))) {
5136 if (0 == strcmp(scale,
"%")) {
5137 (void) snprintf(tok3, (
size_t) (
STRLENGTH-1L),
"%s(%%%%)", tok2);
5141 if (
'_' == scale[0]) {
5142 for (k = 0L; k < (
LENGTH(scale) - 1L); k++) {
5143 scale[k] = scale[k+1];
5147 (void) snprintf(tok3, (
size_t) (
STRLENGTH-1L),
"%s(%s)", tok2, scale);
5152 if (0 != strcmp(
"Space", tok1)) {
5162 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \" %s\" );\n", i, frm);
5164 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \" %s\\n\");\n", i, frm);
5169 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \" %s\" );\n", i, frm);
5171 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \" %s\\n\");\n", i, frm);
5181 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" %%s\\n\", TITLE);\n" );
5182 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" (ping information )\\n\");\n");
5183 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" (compiler version ) NAPA %%s\\n\", NAPA_VERSION);\n");
5184 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" (source file ) \\\"%%s\\\"\\n\", SOURCE);\n" );
5185 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" (random seed ) %%lld\\n\", RANDOM_SEED);\n" );
5186 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \" %%s\\n\", CREATED);\n");
5193 char *str1 = (
char*) NULL;
5194 char *str2 = (
char*) NULL;
5198 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* *** THIS DUMP FILE CREATED BY NAPA %6s [%5s] AT RUN TIME,\");\n",
5200 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" IS BUILT TO BE LOADED BY THE INSTRUCTION 'load'. %%9s *** */\\n\", \" \");\n");
5201 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %24s %%92s *** */\\n\\n\", \" \");\n",
NAPA_Compile_Time);
5202 (void) strcpy(tok,
"\"/* *** SOURCE: %-109s *** */\\n\\n\"");
5203 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, %s, SOURCE);\n", tok);
5207 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\", \" \");\n" );
5210 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%s\", \"%s\");\n", str2 );
5211 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" %%*s *** */\\n\", %d, \" \");\n", (115 - ((
int) strlen(str2))));
5213 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\\n\\n\", \" \");\n");
5214 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\", \" \");\n" );
5215 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\\n\", \" \");\n" );
5216 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#undef DUMP_FLAG\\n\\n\");\n" );
5217 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#define DUMP_IS_REGISTERED\\n\\n\");\n" );
5218 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#define NO_ARRAY_IS_REGISTERED\\n\");\n" );
5219 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#define NO_GLOBAL_IS_REGISTERED\\n\");\n" );
5220 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#define NO_NODE_IS_REGISTERED\\n\");\n" );
5221 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#define NO_TOOL_IS_REGISTERED\\n\");\n" );
5222 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#define NO_VAR_IS_REGISTERED\\n\\n\");\n" );
5226 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* The content of user-defined functions is not dumped by NAPA. %%61s *** */\\n\", \" \");\n");
5230 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* A user-defined formula was used to compute the NAPA time global variables. %%47s *** */\\n\", \" \");\n");
5231 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* This formula is not recorded in this dump file. %%74s *** */\\n\", \" \");\n");
5234 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* Therefore, this dump file could not contain all\");\n" );
5235 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" the data necessary to continue the simulation. %%27s *** */\\n\", \" \");\n" );
5239 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* *** CAUTION *** %3ld nodes have been stuck by user!%%71s",
Num_Stucks );
5240 (void) fprintf(
STDOUT,
" *** */\\n\\n\", \" \");\n");
5242 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* *** CAUTION *** A node has been stuck by user!%%74s" );
5243 (void) fprintf(
STDOUT,
" *** */\\n\\n\", \" \");\n");
5252 char *str = (
char*) NULL;
5255 char sgn[2] = {
'\0'};
5259 (void) fprintf(
STDOUT,
"\nvoid napa_file_banner(void) {\n" );
5260 (void) fprintf(
STDOUT,
"#if defined(STRICTLY_NO_BANNER)\n");
5261 (void) fprintf(
STDOUT,
" return;\n");
5262 (void) fprintf(
STDOUT,
"#else\n" );
5264 for (o = 0L; o <
Num_IOs; o++) {
5275 (void) fprintf(
STDOUT,
" if ( (2 == napa_waypoint) || (3 == napa_waypoint) ) {\n");
5277 (void) fprintf(
STDOUT,
" }\n");
5278 (void) fprintf(
STDOUT,
" if ( (2 == napa_waypoint) || (3 == napa_waypoint) || (5 == napa_waypoint) ) {\n");
5280 (void) fprintf(
STDOUT,
" }\n");
5281 if (0 != strcmp(
"stderr",
IO_List[o].fname)) {
5282 (void) fprintf(
STDOUT,
" #if !defined(NO_BANNER)\n");
5283 (void) fprintf(
STDOUT,
" if ( 5 == napa_waypoint ) {\n");
5284 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"#\\n\");\n", o);
5285 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"# (end of output file )\\n\");\n", o);
5286 (void) fprintf(
STDOUT,
" }\n");
5287 (void) fprintf(
STDOUT,
" #endif\n");
5293 (void) fprintf(
STDOUT,
" if ( (2 == napa_waypoint) || (3 == napa_waypoint) ) {\n");
5295 (void) fprintf(
STDOUT,
" }\n");
5296 (void) fprintf(
STDOUT,
" if ( 5 == napa_waypoint ) {\n");
5297 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_ping, \"\\n **** end of ping file\\n\");\n");
5298 (void) fprintf(
STDOUT,
" }\n");
5301 (void) fprintf(
STDOUT,
" if ( (2 == napa_waypoint) || (3 == napa_waypoint) ) {\n");
5303 (void) fprintf(
STDOUT,
" }\n");
5304 (void) fprintf(
STDOUT,
" if ( 5 == napa_waypoint ) {\n");
5305 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* *** %%118s *** */\\n\", \" \");\n");
5306 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\\n\", \" \");\n");
5307 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" #if !defined(DUMP_FLAG)\\n\");\n" );
5308 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \" (void) fprintf(stderr, \\\" has no effect.\\\\n\\\\n\\\");\\n\");\n");
5309 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"#endif\\n\\n\");\n" );
5310 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"\\n/* *** %%118s *** */\\n\", \" \");\n");
5311 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** %%118s *** */\\n\\n\", \" \");\n");
5312 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_dump, \"/* *** End of dump file %%101s *** */\\n\", \" \");\n");
5313 (void) fprintf(
STDOUT,
" }\n");
5316 (void) fprintf(
STDOUT,
" if ( (4 == napa_waypoint) && (!TERMINATE) ) {\n");
5317 for (o = 0L; o <
Num_IOs; o++) {
5319 (void) fprintf(
STDOUT,
" ");
5321 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, \"\\n%%s\", SEPARATOR);\n", o);
5322 (void) fprintf(
STDOUT,
" }\n" );
5325 (void) fprintf(
STDOUT,
" }\n" );
5327 (void) fprintf(
STDOUT,
" return;\n");
5328 (void) fprintf(
STDOUT,
"#endif\n" );
5329 (void) fprintf(
STDOUT,
"}\n" );
5337 (void) fprintf(
STDOUT,
"\n /* (call user's closedown function) */\n");
5339 (void) fprintf(
STDOUT,
"\n /* (call user's closedown functions) */\n");
5345 (void) fprintf(
STDOUT,
"\n /* (call postprocess function) */\n");
5347 (void) fprintf(
STDOUT,
"\n /* (call postprocess functions) */\n");
5357 long prev_nseg, nseg;
5358 char *s = (
char*) NULL;
5359 char sgn[2] = {
'\0'};
5364 if (0 == strcmp(
Post_List[i].function,
"post_void")) {
5368 if (nseg != prev_nseg) {
5370 (void) fprintf(
STDOUT,
"%s napa_segment = %ldL;\n", indent, nseg);
5374 (void) fprintf(
STDOUT,
" %s%s", indent, type);
5383 (void) strcpy(v1, tok);
5386 (void) fprintf(
STDOUT,
"%s%s,", sgn, v1);
5399 (void) fprintf(
STDOUT,
" napa_waypoint = 5;\n");
5403 (void) fprintf(
STDOUT,
"\n /* (write file banner closing) */\n");
5405 (void) fprintf(
STDOUT,
"\n /* (write file banner closings) */\n");
5407 (void) fprintf(
STDOUT,
" napa_file_banner();\n\n");
5411 (void) fprintf(
STDOUT,
" /* (close I/O stream) */\n");
5413 (void) fprintf(
STDOUT,
" /* (close I/O streams) */\n");
5415 for (i = 0L; i <
Num_IOs; i++) {
5419 (void) strcpy(tok,
Var_List[n].name1);
5420 (void) strcpy(v1, tok);
5422 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_%ld, %s, \".out\", \"output\");\n", i, v1);
5424 (void) strcpy(tok,
IO_List[i].fname);
5425 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_%ld, \"%s\", \".out\", \"output\");\n", i, tok);
5430 (void) strcpy(tok,
Var_List[n].name1);
5431 (void) strcpy(v1, tok);
5433 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_%ld, %s, \".in\", \"input\");\n", i, v1);
5435 (void) strcpy(tok,
IO_List[i].fname);
5436 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_%ld, \"%s\", \".in\", \"input\");\n", i, tok);
5442 (void) fprintf(
STDOUT,
"\n /* (close ping file) */\n");
5445 (void) strcpy(tok,
Var_List[n].name1);
5446 (void) strcpy(v1, tok);
5448 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_ping, %s, \".png\", \"ping\");\n", v1);
5451 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_ping, \"%s\", \".png\", \"ping\");\n", tok);
5456 (void) fprintf(
STDOUT,
"\n /* (close dump file) */\n");
5460 (void) strcpy(tok,
Var_List[n].name1);
5461 (void) strcpy(v1, tok);
5463 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_dump, %s, \".dmp\", \"dump\");\n\n", v1);
5466 (void) fprintf(
STDOUT,
" (void) IO_MANAGER(CLOSE, &napa_fp_dump, \"%s\", \".dmp\", \"dump\");\n\n", tok);
5474 (void) fprintf(
STDOUT,
"\n /* (end of simulation) */\n");
5475 (void) fprintf(
STDOUT,
" napa_waypoint = 6;\n" );
5476 (void) fprintf(
STDOUT,
" napa_exit(EXIT_SUCCESS);\n\n");
5477 (void) fprintf(
STDOUT,
"}\n");
5483 (void) fprintf(
STDERR,
"\n");
5484 (void) fprintf(
STDOUT,
"\n\n/* ******************************************************** */\n" );
5486 (void) fprintf(
STDOUT,
"/* **** ABNORMAL TERMINATION! **** */\n" );
5487 (void) fprintf(
STDOUT,
"/* ******************************************************** */\n\n\n");
5494 (void) fprintf(
STDOUT,
"#include <stdio.h>\n\n");
5495 (void) fprintf(
STDOUT,
"int main() {\n\n" );
5496 (void) fprintf(
STDOUT,
" fprintf(stderr, \"\\n\\n ****\\n\");\n");
5497 (void) fprintf(
STDOUT,
" fprintf(stderr, \" **** No code has been produced\\n\");\n");
5498 (void) fprintf(
STDOUT,
" fprintf(stderr, \" ****\\n\");\n" );
5499 (void) fprintf(
STDOUT,
" return 0;\n");
5500 (void) fprintf(
STDOUT,
"\n}\n" );
5511 flag = (int) ((
Node_List[n].used) && flag);
5514 flag = (int) ((
Var_List[n].used) && flag);
5520 (void) fprintf(
STDERR,
"\nNAPA Compiler Warning (unused element):\n");
5536 (void) fprintf(
STDERR,
"\n");
5539 (void) fprintf(
STDERR,
"\nNAPA Error: (tool)\n\n");
5540 (void) fprintf(
STDERR,
" the TOOL_INDEX is not REGISTERED, as tool synchronization has been cut off");
5542 (void) fprintf(
STDERR,
" and/or no tool has been instantiated");
5544 (void) fprintf(
STDERR,
"\n");
5548 (void) fprintf(
STDERR,
"\nNAPA Error: (tool)\n\n");
5549 (void) fprintf(
STDERR,
" the TOOL_INDEX is not REGISTERED, as no tool has been instantiated\n");
5554 if ((0L == n) || (31L < n)) {
5555 (void) fprintf(
STDOUT,
"\n\n/* *** C CODE PRODUCED BY THE NAPA COMPILER IN%s",
5557 (void) fprintf(
STDOUT,
" (WALL CLOCK) %s */\n\n",
multiple(
'*', 58L));
5559 (void) fprintf(
STDOUT,
"\n\n/* *** C CODE PRODUCED BY THE NAPA COMPILER IN%s (WALL CLOCK) FOR '%s' %s */\n\n",
5563 (void) fprintf(
STDERR,
"\n");
5575 char *str = (
char*) NULL;
5576 long nseg, prev_nseg;
5591 if (nseg != prev_nseg) {
5593 (void) fprintf(
STDOUT,
"%s napa_segment = %ldL;\n", indent, nseg);
5598 (void) fprintf(
STDOUT,
"%s napa_msg = &(napa_mailbox[%ld]);\n", indent,
UserTool_List[i].mailbox);
5614 if ((0 == strcmp(tok1,
"after")) || (0 == strcmp(tok1,
"with"))) {
5618 if (0 == strcmp(tok1,
"-")) {
5619 (void) strcpy(v1,
"-");
5622 (void) strcpy(v1,
"");
5624 if (
'$' == tok1[(
LENGTH(tok1))-1L]) {
5626 (void) strcat(v1, tok1);
5630 (void) strcat(v1, v2);
5632 (void) strcpy(v2,
Var_List[n].name1);
5634 (void) strcat(v1, v2);
5638 }
else if ((0 == strcmp(tok1,
"stdout")) || (0 == strcmp(tok1,
"stdin")) || (0 == strcmp(tok1,
"stderr"))) {
5639 (void) strcpy(tok2, tok1);
5640 (void) snprintf(tok1, (
size_t) (
LINLENGTH-1L),
"\"%s\"", tok2);
5641 (void) strcat(v1, tok1);
5643 (void) strcat(v1, tok1);
5646 (void) fprintf(
STDOUT,
",");
5648 (void) fprintf(
STDOUT,
"%s", v1);
void print_location(const unsigned long *mlin, const unsigned long *mfil)
void cat_file(const char *fnam, const char *type, long command, const unsigned long *mlin, const unsigned long *mfil)
void build_condition(char *cond, const unsigned long *mlin, const unsigned long *mfil)
void print_warning_location(const char *type, const unsigned long *mlin, const unsigned long *mfil)
void print_error_location(const char *type, const unsigned long *mlin, const unsigned long *mfil)
int test_endianness(void)
double GCD(double a, double b)
long constant_type(char *identifier)
long get_type(char *identifier)
int variable_update_block(void)
long update_id(const char *identifier, long num)
long cmdline_id(const char *identifier)
void strcpy_alloc(char **dest, const char *sour, const unsigned long *mlin, const unsigned long *mfil)
long directive_id(const char *identifier)
int time_output_block(void)
long node_id(const char *identifier)
long var_id(const char *identifier)
long debug_id(const char *identifier)
int sort_names(const void *a, const void *b)
int node_update_block(void)
long record_id(const char *identifier)
void strcpy_realloc(char **dest, const char *sour, const unsigned long *mlin, const unsigned long *mfil)
void process_node_error(const char *tok1)
void process_variable_error(const char *tok1)
EXTERN char * Generator_Lib_Name
EXTERN RANDOMSEED_TYPE Seed_List
EXTERN VAR_TYPE Var_List[2047L]
EXTERN char NAPA_Compile_Time[33]
EXTERN char I_String_Format[2047L]
EXTERN RECORD_TYPE Record_List[127L]
EXTERN long Num_Functions
EXTERN ARRAY_TYPE Array_List[63L]
EXTERN char V_Format[2047L]
EXTERN char E_Format[2047L]
EXTERN int Directive_Flag
EXTERN char S_Format[2047L]
EXTERN char R_Format[2047L]
EXTERN POST_TYPE Post_List[63L]
EXTERN double NAPA_Compile_Start
EXTERN NODE_TYPE Node_List[4095L]
#define DIFFERENTIATOR_KIND
EXTERN char S_String_Format[2047L]
EXTERN long Num_UserTools
EXTERN char NAPA_Job_ID[19]
EXTERN USERTOOL_TYPE UserTool_List[511L]
EXTERN SAMPLING_TYPE Sampling_List
EXTERN int Tool_Index_Flag
EXTERN char R_String_Format[2047L]
EXTERN char Export0_Head_String[16383L]
EXTERN char X_String_Format[2047L]
EXTERN char * Record_Cell_File_Table[511L]
EXTERN DIRECTIVE_TYPE Directive_List[255L]
EXTERN DEBUG_TYPE Debug_List[63L]
EXTERN HEADER_TYPE Header_List[63L]
EXTERN char X_Format[2047L]
EXTERN INJECT_TYPE Inject_List[63L]
#define NAPA_COMPILER_VERSION
EXTERN LOAD_TYPE Load_List
EXTERN PING_TYPE Ping_List
EXTERN INTERLUDE_TYPE Interlude_List
EXTERN long Num_Directives
EXTERN int Interlude_Flag1
EXTERN char Comment_String[63L][16383L]
EXTERN char * Header_Lib_Name
EXTERN char Root_String[2047L]
EXTERN char Export0_List_String[16383L]
EXTERN double NAPA_Compile_Stop
EXTERN long Num_FileCells
EXTERN char Export1_List_String[16383L]
EXTERN char I_Format[2047L]
EXTERN double Simulation_Rate
EXTERN GATEWAY_TYPE Gateway_List
EXTERN long Record_Cell_File_Usage[511L]
EXTERN char Cur_Fil_Name[31L][2047L]
EXTERN CMDLINE_TYPE Cmdline_List[63L]
EXTERN char Title_String[2 *2047L]
EXTERN TERMINATE_TYPE Terminate_List
EXTERN SEGMENT_TYPE Segment_List[127L]
EXTERN char * Main_File_Name
EXTERN int Multdelay_Flag
EXTERN FUNCTION_TYPE Function_List[255L]
#define NAPA_DIGITAL_TYPE
EXTERN char NAPA_Identification_String[35]
EXTERN int Antithetic_Flag
EXTERN char * Net_Lib_Name
EXTERN char Cmdline_String[2047L]
EXTERN char Export1_Head_String[16383L]
EXTERN STUCK_TYPE Stuck_List[63L]
EXTERN DUMP_TYPE Dump_List
EXTERN char Short_Title_String[2 *2047L]
EXTERN IO_TYPE IO_List[63L]
EXTERN long Num_Declare_Commons
#define DIGITAL_DATA_TYPE
EXTERN int Interlude_Flag2
EXTERN UPDATE_TYPE Update_List[2047L]
void check_directive_function(void)
void print_ping_function(void)
void declare_records(void)
void print_output_banner_1(long i, long j)
void reset_arrays_function(void)
void print_terminate_condition(void)
void call_initialization_functions_B(void)
void include_napa_header_files(void)
void declare_an_analog_node(long i)
void print_check_arrays(void)
void include_ANSI_C_header_files(void)
void call_initialization_functions_A(void)
void print_output_banner_2(long i)
void reset_records_function(void)
void call_user_functions(const char *indent, const char *type)
void reset_nodes_function(void)
void open_ping_file(void)
void reset_a_command_line_parameter(long j)
void print_output_banner_0(void)
void reset_a_dc_node(long i)
void declare_prototypes(void)
void print_output_banner_4(char *tok)
void print_check_output(void)
void command_line_usage_function(void)
void prepare_tool_synchronization(void)
void napa_timer_function(void)
void build_usage_comment(void)
void declare_function_pointers(void)
void reset_simulator_variables(void)
void print_C_code_banner_a(void)
void control_init_function(void)
void declare_file_handles(void)
void call_napa_initialization_function(void)
void reset_variables_function(void)
void reset_an_analog_node(long i)
void print_error_banner_and_exit(void)
void declare_global_values(void)
void define_directives(void)
void reset_user_variables(void)
void napa_exit_functions(void)
void declare_a_digital_node(long i)
void close_IO_files(void)
void reset_a_digital_node(long i)
void declare_arrays(void)
void call_postprocess_functions(const char *indent, const char *type)
void print_C_code_banner_b(void)
void print_output_banner_3(void)
void call_closedown_functions(void)
void print_output_banner_function(void)
char * extract_line(char *str1, char *str2)
void strip_extension(char *fnam)
char * replace_char(char *s, char b, char a)
char * get_token(char *str, char *tok, long keep_quotes)
void clean_line(char *str)
char * build_name(const char *sgn, char *tok, long lr_type)
void clean_parentheses(char *tok)
int is_a_string(char *str)
char * get_output_and_scaling(char *str, char *sgn, char *out, char *scl)
char * multiple(char c, long n)
void replace_dollar(char *tok)
void expand_indirections(char *str)
void simplify_pathname(char *pnam)
void drop_pathname(char *pnam)
char * format_suffixed_number(double value, long places, const char *unit)
char * get_sign_and_token(char *str, char *sgn, char *tok)