This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
EGCS 1.1.1 compile-time error on SPARC/Solaris for breakp.c from spice3f5
- To: egcs-bugs at cygnus dot com
- Subject: EGCS 1.1.1 compile-time error on SPARC/Solaris for breakp.c from spice3f5
- From: dhough at dgh dot Eng dot Sun dot COM (David G Hough)
- Date: Tue, 9 Feb 1999 17:29:04 -0800
/net/validator/export/set/validator7/gcc/egcs111/bin/gcc -v
Reading specs from /net/validator/export/set/validator7/gcc/egcs111/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.91.60/specs
gcc version egcs-2.91.60 19981201 (egcs-1.1.1 release)
/net/validator/export/set/validator7/gcc/egcs111/bin/gcc breakp.c -c -O2 -mcpu=v9
gcc: Internal compiler error: program cc1 got fatal signal 11
It's OK at -O1 or with -mcpu=v8.
Here is breakp.c, a component of spice3f5, part of spec99:
#ident "@(#)math.h 2.6 97/06/05"
typedef union _h_val {
unsigned long _i[sizeof(double) / sizeof(unsigned long)];
double _d;
} _h_val;
extern _h_val __huge_val;
extern int signgam;
enum version {libm_ieee = -1, c_issue_4, ansi_1, strict_ansi};
extern enum version _lib_version;
struct exception {
int type;
char *name;
double arg1;
double arg2;
double retval;
};
extern double acos ();
extern double asin ();
extern double atan ();
extern double atan2 ();
extern double cos ();
extern double sin ();
extern double tan ();
extern double cosh ();
extern double sinh ();
extern double tanh ();
extern double exp ();
extern double frexp ();
extern double ldexp ();
extern double log ();
extern double log10 ();
extern double modf ();
extern double pow ();
extern double sqrt ();
extern double ceil ();
extern double fabs ();
extern double floor ();
extern double fmod ();
extern double erf ();
extern double erfc ();
extern double gamma ();
extern double hypot ();
extern int isnan ();
extern double j0 ();
extern double j1 ();
extern double jn ();
extern double lgamma ();
extern double y0 ();
extern double y1 ();
extern double yn ();
extern double acosh ();
extern double asinh ();
extern double atanh ();
extern double cbrt ();
extern double logb ();
extern double nextafter ();
extern double remainder ();
extern double scalb ();
extern double expm1 ();
extern int ilogb ();
extern double log1p ();
extern double rint ();
extern int matherr ();
extern double significand ();
extern double copysign ();
extern double scalbn ();
extern float modff ();
#ident "@(#)floatingpoint.h 2.4 94/06/09"
#ident "@(#)ieeefp.h 2.7 94/11/09"
enum fp_direction_type {
fp_nearest = 0,
fp_tozero = 1,
fp_positive = 2,
fp_negative = 3
};
enum fp_precision_type {
fp_extended = 0,
fp_single = 1,
fp_double = 2,
fp_precision_3 = 3
};
enum fp_exception_type {
fp_inexact = 0,
fp_division = 1,
fp_underflow = 2,
fp_overflow = 3,
fp_invalid = 4
};
enum fp_trap_enable_type {
fp_trap_inexact = 0,
fp_trap_division = 1,
fp_trap_underflow = 2,
fp_trap_overflow = 3,
fp_trap_invalid = 4
};
enum fp_class_type {
fp_zero = 0,
fp_subnormal = 1,
fp_normal = 2,
fp_infinity = 3,
fp_quiet = 4,
fp_signaling = 5
};
typedef int sigfpe_code_type;
typedef void (*sigfpe_handler_type)();
extern sigfpe_handler_type sigfpe ();
typedef float single;
typedef unsigned extended[3];
typedef long double quadruple;
typedef unsigned fp_exception_field_type;
typedef char decimal_string[512];
typedef struct {
enum fp_class_type fpclass;
int sign;
int exponent;
decimal_string ds;
int more;
int ndigits;
} decimal_record;
enum decimal_form {
fixed_form,
floating_form
};
typedef struct {
enum fp_direction_type rd;
enum decimal_form df;
int ndigits;
} decimal_mode;
enum decimal_string_form {
invalid_form,
whitespace_form,
fixed_int_form,
fixed_intdot_form,
fixed_dotfrac_form,
fixed_intdotfrac_form,
floating_int_form,
floating_intdot_form,
floating_dotfrac_form,
floating_intdotfrac_form,
inf_form,
infinity_form,
nan_form,
nanstring_form
};
extern void single_to_decimal
();
extern void double_to_decimal
();
extern void extended_to_decimal
();
extern void quadruple_to_decimal
();
extern void decimal_to_single
();
extern void decimal_to_double
();
extern void decimal_to_extended
();
extern void decimal_to_quadruple
();
extern void string_to_decimal
();
extern void func_to_decimal
();
extern void file_to_decimal
();
extern char *seconvert ();
extern char *sfconvert ();
extern char *sgconvert ();
extern char *econvert ();
extern char *fconvert ();
extern char *gconvert ();
extern char *qeconvert ();
extern char *qfconvert ();
extern char *qgconvert ();
extern char *ecvt ();
extern char *fcvt ();
extern char *gcvt ();
extern double atof ();
extern double strtod ();
extern char *Spice_Exec_Dir;
extern char *Spice_Lib_Dir;
extern char Spice_OptChar;
extern char *Def_Editor;
extern char *Bug_Addr;
extern int AsciiRawFile;
extern char *Spice_Host;
extern char *Spiced_Log;
extern char Spice_Notice[ ];
extern char Spice_Version[ ];
extern char Spice_Build_Date[ ];
extern char *News_File;
extern char *Default_MFB_Cap;
extern char *Spice_Path;
extern char *Help_Path;
extern char *Lib_Path;
extern int Patch_Level;
typedef int bool;
#ident "@(#)ctype.h 1.28 96/08/21 SMI"
#ident "@(#)feature_tests.h 1.13 97/06/26 SMI"
extern unsigned char _ctype[];
#ident "@(#)strings.h 1.3 96/03/12 SMI"
#ident "@(#)types.h 1.51 97/05/06 SMI"
#ident "@(#)isa_defs.h 1.11 97/03/21 SMI"
#ident "@(#)machtypes.h 1.11 96/04/29 SMI"
typedef struct _physadr_t { int r[1]; } *physadr_t;
typedef struct _label_t { int val[2]; } label_t;
typedef unsigned char lock_t;
#ident "@(#)int_types.h 1.4 96/09/25 SMI"
typedef char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
typedef int intptr_t;
typedef unsigned int uintptr_t;
typedef char int_least8_t;
typedef short int_least16_t;
typedef int int_least32_t;
typedef long long int_least64_t;
typedef unsigned char uint_least8_t;
typedef unsigned short uint_least16_t;
typedef unsigned int uint_least32_t;
typedef unsigned long long uint_least64_t;
typedef long long longlong_t;
typedef unsigned long long u_longlong_t;
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
typedef char * caddr_t;
typedef long daddr_t;
typedef short cnt_t;
typedef ulong_t paddr_t;
typedef uchar_t use_t;
typedef short sysid_t;
typedef short index_t;
typedef long off_t;
typedef longlong_t off64_t;
typedef ulong_t ino_t;
typedef long blkcnt_t;
typedef ulong_t fsblkcnt_t;
typedef ulong_t fsfilcnt_t;
typedef u_longlong_t ino64_t;
typedef longlong_t blkcnt64_t;
typedef u_longlong_t fsblkcnt64_t;
typedef u_longlong_t fsfilcnt64_t;
typedef enum { B_FALSE, B_TRUE } boolean_t;
typedef int64_t pad64_t;
typedef uint64_t upad64_t;
typedef longlong_t offset_t;
typedef u_longlong_t u_offset_t;
typedef u_longlong_t len_t;
typedef longlong_t diskaddr_t;
typedef union {
offset_t _f;
struct {
long _u;
off_t _l;
} _p;
} lloff_t;
typedef union {
diskaddr_t _f;
struct {
long _u;
daddr_t _l;
} _p;
} lldaddr_t;
typedef ulong_t k_fltset_t;
typedef long id_t;
typedef uint_t useconds_t;
typedef ulong_t major_t;
typedef ulong_t minor_t;
typedef short pri_t;
typedef ushort_t o_mode_t;
typedef short o_dev_t;
typedef ushort_t o_uid_t;
typedef o_uid_t o_gid_t;
typedef short o_nlink_t;
typedef short o_pid_t;
typedef ushort_t o_ino_t;
typedef int key_t;
typedef ulong_t mode_t;
typedef long uid_t;
typedef uid_t gid_t;
typedef ulong_t nlink_t;
typedef ulong_t dev_t;
typedef long pid_t;
typedef unsigned int pthread_t;
typedef unsigned int pthread_key_t;
typedef struct _pthread_mutex {
struct {
uint8_t __pthread_mutex_flag[4];
uint32_t __pthread_mutex_type;
} __pthread_mutex_flags;
union {
struct {
uint8_t __pthread_mutex_pad[8];
} __pthread_mutex_lock64;
upad64_t __pthread_mutex_owner64;
} __pthread_mutex_lock;
upad64_t __pthread_mutex_data;
} pthread_mutex_t;
typedef struct _pthread_cond {
struct {
uint8_t __pthread_cond_flag[4];
uint32_t __pthread_cond_type;
} __pthread_cond_flags;
upad64_t __pthread_cond_data;
} pthread_cond_t;
typedef struct _pthread_attr {
void *__pthread_attrp;
} pthread_attr_t;
typedef struct _pthread_mutexattr {
void *__pthread_mutexattrp;
} pthread_mutexattr_t;
typedef struct _pthread_condattr {
void *__pthread_condattrp;
} pthread_condattr_t;
typedef struct _once {
upad64_t __pthread_once_pad[4];
} pthread_once_t;
typedef uint_t size_t;
typedef int ssize_t;
typedef long time_t;
typedef long clock_t;
typedef int clockid_t;
typedef int timer_t;
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef long hostid_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef struct _quad { long val[2]; } quad;
#ident "@(#)select.h 1.11 96/06/20 SMI"
#ident "@(#)time.h 2.52 96/11/15 SMI"
struct timeval {
time_t tv_sec;
long tv_usec;
};
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
typedef struct timespec {
time_t tv_sec;
long tv_nsec;
} timespec_t;
typedef struct timespec timestruc_t;
typedef struct itimerspec {
struct timespec it_interval;
struct timespec it_value;
} itimerspec_t;
typedef longlong_t hrtime_t;
int adjtime();
int gettimer();
int settimer();
int utimes();
int settimeofday();
hrtime_t gethrtime();
hrtime_t gethrvtime();
int gettimeofday();
#ident "@(#)time.h 1.25 96/03/12 SMI"
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
extern long clock();
extern double difftime();
extern time_t mktime();
extern time_t time();
extern size_t strftime();
extern struct tm *gmtime(), *localtime();
extern char *ctime(), *asctime(), *strptime();
extern int cftime(), ascftime();
extern void tzset();
extern long timezone, altzone;
extern int daylight;
extern char *tzname[2];
extern struct tm *getdate();
extern int getdate_err;
typedef long fd_mask;
typedef long fds_mask;
typedef struct fd_set {
long fds_bits[(((1024)+(( (sizeof (fds_mask) * 8))-1))/( (sizeof (fds_mask) * 8)))];
} fd_set;
extern int select();
#ident "@(#)string.h 1.19 96/03/12 SMI"
extern void *memcpy();
extern void *memmove();
extern char *strcpy();
extern char *strncpy();
extern char *strcat();
extern char *strncat();
extern int memcmp();
extern int strcmp();
extern int strcoll();
extern int strncmp();
extern size_t strxfrm();
extern void *memchr();
extern char *strchr();
extern size_t strcspn();
extern char *strpbrk();
extern char *strrchr();
extern size_t strspn();
extern char *strstr();
extern char *strtok();
extern void *memset();
extern char *strerror();
extern size_t strlen();
extern void *memccpy();
extern char *strsignal();
extern int ffs();
extern int strcasecmp();
extern int strncasecmp();
extern char *strdup();
extern int bcmp();
extern void bcopy();
extern void bzero();
extern char *index();
extern char *rindex();
extern char *tmalloc();
extern char *trealloc();
extern void txfree();
extern char *copy();
extern char *gettok();
extern void appendc();
extern int scannum();
extern int prefix();
extern int ciprefix();
extern int cieq();
extern void strtolower();
extern int substring();
extern char *tilde_expand( );
extern void cp_printword();
extern char *datestring();
extern double seconds();
extern char *smktemp();
#ident "@(#)stdlib.h 1.40 97/06/30 SMI"
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
long long quot;
long long rem;
} lldiv_t;
typedef long wchar_t;
extern unsigned char _ctype[];
extern double atof();
extern int atoi();
extern long int atol();
extern double strtod();
extern long int strtol();
extern unsigned long strtoul();
extern int rand();
extern void srand();
extern void *calloc();
extern void free();
extern void *malloc();
extern void *realloc();
extern void abort();
extern int atexit();
extern void exit();
extern void _exithandle();
extern char *getenv();
extern int system();
extern void *bsearch();
extern void qsort();
extern int abs();
extern div_t div();
extern long int labs();
extern ldiv_t ldiv();
extern int mbtowc();
extern int mblen();
extern int wctomb();
extern size_t mbstowcs();
extern size_t wcstombs();
extern double drand48();
extern double erand48();
extern long jrand48();
extern void lcong48();
extern long lrand48();
extern long mrand48();
extern long nrand48();
extern unsigned short *seed48();
extern void srand48();
extern int putenv();
extern void setkey();
extern void swab();
extern int mkstemp();
extern int mkstemp64();
extern long a64l();
extern char *ecvt();
extern char *fcvt();
extern char *gcvt();
extern int getsubopt();
extern int grantpt();
extern char *initstate();
extern char *l64a();
extern char *mktemp();
extern char *ptsname();
extern long random();
extern char *realpath();
extern char *setstate();
extern void srandom();
extern int ttyslot();
extern void *valloc();
extern int unlockpt();
extern int dup2();
extern char *qecvt();
extern char *qfcvt();
extern char *qgcvt();
extern char *getcwd();
extern char *getexecname();
extern char *getlogin();
extern int getopt();
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass();
extern char *getpassphrase();
extern int getpw();
extern int isatty();
extern void *memalign();
extern char *ttyname();
extern long long atoll();
extern long long llabs();
extern lldiv_t lldiv();
extern char *lltostr();
extern long long strtoll();
extern unsigned long long strtoull();
extern char *ulltostr();
extern void perror();
extern char *sbrk();
#ident "@(#)stdio.h 1.49 97/05/09 SMI"
#ident "@(#)va_list.h 1.6 96/01/26 SMI"
typedef char *__va_list;
typedef long long __longlong_t;
typedef long fpos_t;
typedef __longlong_t fpos64_t;
typedef struct
{
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
unsigned char _flag;
unsigned char _file;
} FILE;
extern FILE _iob[20];
extern FILE *_lastbuf;
extern unsigned char *_bufendtab[];
extern unsigned char _sibuf[], _sobuf[];
extern int remove();
extern int rename();
extern FILE *tmpfile();
extern char *tmpnam();
extern int fclose();
extern int fflush();
extern FILE *fopen();
extern FILE *freopen();
extern void setbuf();
extern int setvbuf();
extern int fprintf();
extern int fscanf();
extern int printf();
extern int scanf();
extern int sprintf();
extern int sscanf();
extern int vfprintf();
extern int vprintf();
extern int vsprintf();
extern int fgetc();
extern char *fgets();
extern int fputc();
extern int fputs();
extern int getc();
extern int getchar();
extern char *gets();
extern int putc();
extern int putchar();
extern int puts();
extern int ungetc();
extern size_t fread();
extern size_t fwrite();
extern int fgetpos();
extern int fseek();
extern int fsetpos();
extern long ftell();
extern void rewind();
extern void clearerr();
extern int feof();
extern int ferror();
extern void perror();
extern int _filbuf();
extern int _flsbuf();
extern FILE *fdopen();
extern char *ctermid();
extern int fileno();
extern FILE *popen();
extern char *cuserid();
extern char *tempnam();
extern int getopt();
extern int getsubopt();
extern char *optarg;
extern int optind, opterr, optopt;
extern int getw();
extern int putw();
extern int pclose();
extern int fseeko();
extern off_t ftello();
extern FILE *fopen64();
extern FILE *freopen64();
extern FILE *tmpfile64();
extern int fgetpos64();
extern int fsetpos64();
extern int fseeko64();
extern off64_t ftello64();
struct wordlist {
char *wl_word;
struct wordlist *wl_next;
struct wordlist *wl_prev;
} ;
typedef struct wordlist wordlist;
struct _complex {
double cx_real;
double cx_imag;
} ;
typedef struct _complex complex;
extern char *getusername();
extern char *gethome();
extern char *tildexpand();
extern char *printnum();
extern int cp_numdgt;
extern void fatal();
extern void setenv();
extern void cp_printword();
extern char **wl_mkvec();
extern char *wl_flatten();
extern int wl_length();
extern void wl_free();
extern void wl_print();
extern void wl_sort();
extern wordlist *wl_append();
extern wordlist *wl_build();
extern wordlist *wl_copy();
extern wordlist *wl_range();
extern wordlist *wl_nthelem();
extern wordlist *wl_reverse();
extern wordlist *wl_splice();
struct comm {
char *co_comname;
void (*co_func) ();
bool co_stringargs;
bool co_spiceonly;
bool co_major;
long co_cctypes[4];
unsigned int co_env;
int co_minargs;
int co_maxargs;
int (*co_argfn) ();
char *co_help;
};
struct histent {
int hi_event;
wordlist *hi_wlist;
struct histent *hi_next;
struct histent *hi_prev;
};
struct variable {
char va_type;
char *va_name;
union {
bool vV_bool;
int vV_num;
double vV_real;
char *vV_string;
struct variable *vV_list;
} va_V;
struct variable *va_next;
} ;
struct alias {
char *al_name;
wordlist *al_text;
struct alias *al_next;
struct alias *al_prev;
} ;
extern struct alias *cp_aliases;
extern void com_alias();
extern void com_unalias();
extern void cp_paliases();
extern void cp_setalias();
extern void cp_unalias();
extern wordlist *cp_doalias();
extern char cp_back;
extern wordlist *cp_bquote();
extern bool cp_nocc;
extern bool cp_comlook();
extern char *cp_kwswitch();
extern void cp_addcomm();
extern void cp_addkword();
extern void cp_ccom();
extern void cp_ccon();
extern void cp_ccrestart();
extern void cp_remcomm();
extern void cp_remkword();
extern wordlist *cp_cctowl();
extern FILE *cp_in;
extern FILE *cp_out;
extern FILE *cp_err;
extern FILE *cp_curin;
extern FILE *cp_curout;
extern FILE *cp_curerr;
extern bool cp_debug;
extern char cp_amp;
extern char cp_gt;
extern char cp_lt;
extern void com_chdir();
extern void com_echo();
extern void com_strcmp();
extern void com_rehash();
extern void com_shell();
extern void cp_ioreset();
extern wordlist *cp_redirect();
extern wordlist *cp_parse();
extern bool cp_cwait;
extern bool cp_dounixcom;
extern char *cp_csep;
extern int cp_evloop();
extern void com_cdump();
extern void cp_resetcontrol();
extern void cp_toplevel();
extern void cp_popcontrol();
extern void cp_pushcontrol();
extern bool cp_globmatch();
extern char *cp_tildexpand();
extern char cp_cbrac;
extern char cp_ccurl;
extern char cp_comma;
extern char cp_huh;
extern char cp_obrac;
extern char cp_ocurl;
extern char cp_star;
extern char cp_til;
extern wordlist *cp_doglob();
extern bool cp_didhsubst;
extern char cp_bang;
extern char cp_hat;
extern int cp_maxhistlength;
extern struct histent *cp_lastone;
extern void com_history();
extern void cp_addhistent();
extern void cp_hprint();
extern wordlist *cp_histsubst();
extern FILE *cp_inp_cur;
extern bool cp_bqflag;
extern bool cp_interactive;
extern char *cp_altprompt;
extern char *cp_promptstring;
extern char cp_hash;
extern int cp_event;
extern wordlist *cp_lexer();
extern int inchar();
extern char cp_chars[];
extern void cp_init();
extern char out_pbuf[];
extern bool out_moremode;
extern bool out_isatty;
extern void out_init();
extern void out_printf();
extern void out_send();
extern char *cp_unquote();
extern void cp_quoteword();
extern void cp_striplist();
extern void cp_wstrip();
extern bool cp_unixcom();
extern void cp_hstat();
extern void cp_rehash();
extern bool cp_getvar();
extern bool cp_ignoreeof;
extern bool cp_noclobber;
extern bool cp_noglob;
extern bool cp_nonomatch;
extern char cp_dol;
extern void com_set();
extern void com_unset();
extern void com_shift();
extern void cp_remvar();
extern void cp_vprint();
extern void cp_vset();
extern wordlist *cp_variablesubst();
extern wordlist *cp_varwl();
extern struct variable *cp_setparse();
wordlist *vareval();
extern bool cp_istrue();
extern bool cp_oddcomm();
extern void cp_doquit();
extern void cp_periodic();
extern void ft_cpinit();
extern struct comm *cp_coms;
extern double *ft_numparse();
extern char *cp_program;
extern bool ft_nutmeg;
extern struct variable *cp_enqvar();
extern void cp_usrvars();
extern int cp_usrset();
extern void fatal();
typedef enum {
GRID_NONE = 0, GRID_LIN = 1, GRID_LOGLOG = 2, GRID_XLOG = 3,
GRID_YLOG = 4, GRID_POLAR = 5, GRID_SMITH = 6, GRID_SMITHGRID = 7
} GRIDTYPE;
typedef enum {
PLOT_LIN = 0, PLOT_COMB = 1, PLOT_POINT = 2
} PLOTTYPE;
struct dvec {
char *v_name;
int v_type;
short v_flags;
double *v_realdata;
complex *v_compdata;
double v_minsignal;
double v_maxsignal;
GRIDTYPE v_gridtype;
PLOTTYPE v_plottype;
int v_length;
int v_rlength;
int v_outindex;
int v_linestyle;
int v_color;
char *v_defcolor;
int v_numdims;
int v_dims[8];
struct plot *v_plot;
struct dvec *v_next;
struct dvec *v_link2;
struct dvec *v_scale;
} ;
struct plot {
char *pl_title;
char *pl_date;
char *pl_name;
char *pl_typename;
struct dvec *pl_dvecs;
struct dvec *pl_scale;
struct plot *pl_next;
wordlist *pl_commands;
struct variable *pl_env;
char *pl_ccom;
bool pl_written;
int pl_ndims;
} ;
struct pnode {
char *pn_name;
struct dvec *pn_value;
struct func *pn_func;
struct op *pn_op;
struct pnode *pn_left;
struct pnode *pn_right;
struct pnode *pn_next;
} ;
struct op {
int op_num;
char *op_name;
char op_arity;
struct dvec *(*op_func)();
} ;
struct func {
char *fu_name;
char *(*fu_func)();
} ;
struct udfunc {
char *ud_name;
int ud_arity;
struct pnode *ud_text;
struct udfunc *ud_next;
} ;
struct element {
int e_token;
int e_type;
union {
char *un_string;
double un_double;
struct pnode *un_pnode;
} e_un;
};
typedef char GENERIC;
typedef struct sIFparm {
char *keyword;
int id;
int dataType;
char *description;
} IFparm;
typedef GENERIC *IFuid;
typedef struct sIFparseTree {
int numVars;
int *varTypes;
union uIFvalue * vars;
int ((*IFeval)());
} IFparseTree;
typedef void * IFnode;
typedef struct sIFcomplex {
double real;
double imag;
} IFcomplex;
typedef union uIFvalue {
int iValue;
double rValue;
IFcomplex cValue;
char *sValue;
IFuid uValue;
IFnode nValue;
IFparseTree *tValue;
struct {
int numValue;
union {
int *iVec;
double *rVec;
IFcomplex *cVec;
char **sVec;
IFuid *uVec;
IFnode *nVec;
}vec;
}v;
} IFvalue;
typedef struct sIFdevice {
char *name;
char *description;
int *terms;
int *numNames;
char **termNames;
int *numInstanceParms;
IFparm *instanceParms;
int *numModelParms;
IFparm *modelParms;
int flags;
} IFdevice;
typedef struct sIFanalysis {
char *name;
char *description;
int numParms;
IFparm *analysisParms;
} IFanalysis;
typedef struct sIFsimulator {
char *simulator;
char *description;
char *version;
int ((*newCircuit)());
int ((*deleteCircuit)());
int ((*newNode)());
int ((*groundNode)());
int ((*bindNode)());
int ((*findNode)());
int ((*instToNode)());
int ((*setNodeParm)());
int ((*askNodeQuest)());
int ((*deleteNode)());
int ((*newInstance)());
int ((*setInstanceParm)());
int ((*askInstanceQuest)());
int ((*findInstance)());
int ((*deleteInstance)());
int ((*newModel)());
int ((*setModelParm)());
int ((*askModelQuest)());
int ((*findModel)());
int ((*deleteModel)());
int ((*newTask)());
int ((*newAnalysis)());
int ((*setAnalysisParm)());
int ((*askAnalysisQuest)());
int ((*findAnalysis)());
int ((*findTask)());
int ((*deleteTask)());
int ((*doAnalyses)());
char *((*nonconvErr)());
int numDevices;
IFdevice **devices;
int numAnalyses;
IFanalysis **analyses;
int numNodeParms;
IFparm *nodeParms;
int numSpecSigs;
char **specSigs;
} IFsimulator;
typedef struct sIFfrontEnd {
int ((*IFnewUid)());
int ((*IFdelUid)());
int ((*IFpauseTest)());
double ((*IFseconds)());
int ((*IFerror)());
int ((*OUTpBeginPlot)());
int ((*OUTpData)());
int ((*OUTwBeginPlot)());
int ((*OUTwReference)());
int ((*OUTwData)());
int ((*OUTwEnd)());
int ((*OUTendPlot)());
int ((*OUTbeginDomain)());
int ((*OUTendDomain)());
int ((*OUTattributes)());
} IFfrontEnd;
typedef struct sGENinstance {
struct sGENmodel *GENmodPtr;
struct sGENinstance *GENnextInstance;
IFuid GENname;
int GENstate;
int GENnode1;
int GENnode2;
int GENnode3;
int GENnode4;
int GENnode5;
} GENinstance ;
typedef void GENcircuit;
typedef struct sGENmodel {
int GENmodType;
struct sGENmodel *GENnextModel;
GENinstance * GENinstances;
IFuid GENmodName;
} GENmodel;
typedef struct INPparseTree {
IFparseTree p;
struct INPparseNode *tree;
struct INPparseNode **derivs;
} INPparseTree;
typedef struct INPparseNode {
int type;
struct INPparseNode *left;
struct INPparseNode *right;
double constant;
int valueIndex;
char *funcname;
int funcnum;
double (*function)();
} INPparseNode;
typedef struct PTelement {
int token;
int type;
union {
char *string;
double real;
INPparseNode *pnode;
} value;
} PTelement ;
extern double PTplus();
extern double PTminus();
extern double PTtimes();
extern double PTdivide();
extern double PTpower();
extern double PTacos();
extern double PTabs();
extern double PTacosh();
extern double PTasin();
extern double PTasinh();
extern double PTatan();
extern double PTatanh();
extern double PTcos();
extern double PTcosh();
extern double PTexp();
extern double PTln();
extern double PTlog();
extern double PTsgn();
extern double PTsin();
extern double PTsinh();
extern double PTsqrt();
extern double PTtan();
extern double PTtanh();
extern double PTustep();
extern double PTuramp();
extern double PTuminus();
extern int IFeval();
struct INPtab {
char *t_ent;
struct INPtab *t_next;
};
struct INPnTab {
char *t_ent;
GENERIC* t_node;
struct INPnTab *t_next;
};
typedef struct sINPtables{
struct INPtab **INPsymtab;
struct INPnTab **INPtermsymtab;
int INPsize;
int INPtermsize;
GENERIC *defAmod;
GENERIC *defBmod;
GENERIC *defCmod;
GENERIC *defDmod;
GENERIC *defEmod;
GENERIC *defFmod;
GENERIC *defGmod;
GENERIC *defHmod;
GENERIC *defImod;
GENERIC *defJmod;
GENERIC *defKmod;
GENERIC *defLmod;
GENERIC *defMmod;
GENERIC *defNmod;
GENERIC *defOmod;
GENERIC *defPmod;
GENERIC *defQmod;
GENERIC *defRmod;
GENERIC *defSmod;
GENERIC *defTmod;
GENERIC *defUmod;
GENERIC *defVmod;
GENERIC *defWmod;
GENERIC *defYmod;
GENERIC *defZmod;
} INPtables;
typedef struct card{
int linenum;
char *line;
char *error;
struct card *nextcard;
struct card *actualLine;
} card;
typedef struct sINPmodel{
IFuid INPmodName;
int INPmodType;
struct sINPmodel *INPnextModel;
int INPmodUsed;
card *INPmodLine;
GENERIC *INPmodfast;
} INPmodel;
int IFnewUid();
int IFdelUid();
int INPaName();
IFvalue * INPgetValue();
INPtables *INPtabInit();
char * INPdevParse();
char * INPdomodel();
char * INPerrCat();
char * INPfindLev();
char * INPgetMod();
char *INPerror();
char *INPmkTemp();
double INPevaluate();
int INPapName();
int INPgetTitle();
int INPgetTok();
int INPgndInsert();
int INPlookMod();
int INPmakeMod();
int INPpName();
int INPreadAll();
int INPtermInsert();
int INPmkTerm();
int INPtypelook();
void INPcaseFix();
void INPdoOpts();
int INPinsert();
int INPremove();
void INPkillMods();
void INPlist();
void INPpas1() ;
void INPpas2() ;
void INPtabEnd();
void INPptPrint();
void INPgetTree();
void INP2B();
void INP2C();
void INP2D();
void INP2E();
void INP2F();
void INP2G();
void INP2H();
void INP2I();
void INP2J();
void INP2K();
void INP2L();
void INP2M();
void INP2O();
void INP2Q();
void INP2R();
void INP2S();
void INP2T();
void INP2U();
void INP2V();
void INP2W();
void INP2Z();
int INP2dot();
struct line {
int li_linenum;
char *li_line;
char *li_error;
struct line *li_next;
struct line *li_actual;
} ;
struct circ {
char *ci_name;
char *ci_ckt;
INPtables *ci_symtab;
struct line *ci_deck;
struct line *ci_origdeck;
struct line *ci_options;
struct variable *ci_vars;
bool ci_inprogress;
bool ci_runonce;
wordlist *ci_commands;
struct circ *ci_next;
char *ci_nodes;
char *ci_devices;
char *ci_filename;
char *ci_defTask;
char *ci_specTask;
char *ci_curTask;
char *ci_defOpt;
char *ci_specOpt;
char *ci_curOpt;
} ;
struct subcirc {
char *sc_name;
} ;
struct save_info {
char *name;
IFuid *analysis;
int used;
};
extern void ft_agraf();
extern int arg_plot();
extern int arg_display();
extern int arg_print();
extern int arg_let();
extern int arg_load();
extern int arg_set();
extern void outmenuprompt();
extern void com_aspice();
extern void com_jobs();
extern void com_rspice();
extern void ft_checkkids();
extern void braw_write();
extern struct plot *braw_read();
extern bool ft_bpcheck();
extern void com_delete();
extern void com_iplot();
extern void com_save();
extern void com_step();
extern void com_stop();
extern void com_sttus();
extern void com_trce();
extern void ft_trquery();
extern void dbfree( );
extern struct circ *ft_curckt;
extern struct circ *ft_circuits;
extern struct subcirc *ft_subcircuits;
extern void ft_setccirc();
extern void ft_newcirc();
extern void ft_newsubcirc();
extern bool clip_line();
extern bool clip_to_circle();
extern bool cx_degrees;
extern char *cx_mag();
extern char *cx_ph();
extern char *cx_j();
extern char *cx_real();
extern char *cx_imag();
extern char *cx_pos();
extern char *cx_db();
extern char *cx_log();
extern char *cx_ln();
extern char *cx_exp();
extern char *cx_sqrt();
extern char *cx_sin();
extern char *cx_cos();
extern char *cx_tan();
extern char *cx_atan();
extern char *cx_norm();
extern char *cx_uminus();
extern char *cx_rnd();
extern char *cx_mean();
extern char *cx_length();
extern char *cx_vector();
extern char *cx_unitvec();
extern char *cx_plus();
extern char *cx_minus();
extern char *cx_times();
extern char *cx_mod();
extern char *cx_divide();
extern char *cx_comma();
extern char *cx_power();
extern char *cx_eq();
extern char *cx_gt();
extern char *cx_lt();
extern char *cx_ge();
extern char *cx_le();
extern char *cx_ne();
extern char *cx_and();
extern char *cx_or();
extern char *cx_not();
extern char *cx_interpolate();
extern char *cx_deriv();
extern struct comm *cp_coms;
extern void com_compose();
extern void com_dump();
extern void com_state();
extern struct pnode *ft_substdef();
extern void com_define();
extern void com_undefine();
extern void ft_pnode();
extern void com_show();
extern void com_showmod();
extern void com_alter();
extern void com_diff();
extern void com_asciiplot();
extern void com_hardcopy();
extern void com_plot();
extern void com_xgraph();
extern bool ft_acctprint;
extern bool ft_listprint;
extern bool ft_nopage;
extern bool ft_nomod;
extern bool ft_nodesprint;
extern bool ft_optsprint;
extern int ft_cktcoms();
extern void ft_dotsaves();
extern int ft_savedotargs();
extern void fatal();
extern void fperror();
extern void ft_sperror();
extern char ErrorMessage[];
extern struct dvec *op_and();
extern struct dvec *op_comma();
extern struct dvec *op_divide();
extern struct dvec *op_eq();
extern struct dvec *ft_evaluate();
extern struct dvec *op_ge();
extern struct dvec *op_gt();
extern struct dvec *op_le();
extern struct dvec *op_lt();
extern struct dvec *op_minus();
extern struct dvec *op_mod();
extern struct dvec *op_ne();
extern struct dvec *op_not();
extern struct dvec *op_or();
extern struct dvec *op_ind();
extern struct dvec *op_plus();
extern struct dvec *op_power();
extern struct dvec *op_times();
extern struct dvec *op_uminus();
extern struct dvec *op_range();
extern void com_fourier();
extern bool gi_init();
extern bool gi_endpause;
extern bool gi_rottext;
extern int gi_fntheight;
extern int gi_fntwidth;
extern int gi_maxx;
extern int gi_maxy;
extern int gi_nolst;
extern int gi_nocolors;
extern int gi_package;
extern void gi_arc();
extern void gi_clearscreen();
extern void gi_close();
extern void gi_drawline();
extern void gi_redraw();
extern void gi_setcolor();
extern void gi_resetcolor();
extern void gi_setlinestyle();
extern void gi_text();
extern void gi_update();
extern bool gr_gmode;
extern bool gr_hmode;
extern bool gr_init();
extern void gr_clean();
extern void gr_end();
extern void gr_iplot();
extern void gr_iplot_end();
extern void gr_pmsg();
extern void gr_point();
extern void gr_start();
extern double gr_xrange[2];
extern double gr_yrange[2];
extern int gr_xmargin;
extern int gr_ymargin;
extern int gr_xcenter;
extern int gr_ycenter;
extern int gr_radius;
extern bool gr_circular;
extern void gr_fixgrid();
extern void com_edit();
extern void com_listing();
extern void com_source();
extern void inp_dodeck();
extern void inp_source();
extern void inp_spsource();
extern void inp_casefix();
extern void inp_list();
extern void inp_readall();
extern FILE *inp_pathopen();
extern void inp_nutsource();
extern void nutinp_dodeck();
extern void nutcom_source();
extern bool ft_interpolate();
extern bool ft_polyfit();
extern double ft_peval();
extern void ft_polyderiv( );
extern void com_linearize();
extern void mi_arc();
extern bool mi_init();
extern void mi_clearscreen();
extern void mi_close();
extern void mi_drawline();
extern void mi_resetcolor();
extern void mi_setcolor();
extern void mi_setlinestyle();
extern void mi_text();
extern void mi_update();
extern void com_bug();
extern void com_ahelp();
extern void com_ghelp();
extern void com_help();
extern void com_quit();
extern void com_version();
extern int hcomp();
extern void com_where();
extern bool ft_strictnumparse;
extern double *ft_numparse();
extern bool ft_simdb;
extern bool ft_parsedb;
extern bool ft_evdb;
extern bool ft_vecdb;
extern bool ft_grdb;
extern bool ft_gidb;
extern bool ft_controldb;
extern bool ft_asyncdb;
extern char *ft_setkwords[];
extern struct line *inp_getopts();
extern struct variable *cp_enqvar();
extern struct variable *cp_uservars();
extern int cp_userset();
extern struct func ft_funcs[];
extern struct func func_not;
extern struct func func_uminus;
extern struct pnode *ft_getpnames();
extern void free_pnode();
extern int ft_findpoint();
extern double *ft_minmax();
extern void ft_graf();
extern void pi_arc();
extern bool pi_init();
extern void pi_clearscreen();
extern void pi_close();
extern void pi_drawline();
extern void pi_resetcolor();
extern void pi_setcolor();
extern void pi_setlinestyle();
extern void pi_text();
extern void pi_update();
extern void com_cross();
extern void com_display();
extern void com_let();
extern void com_unlet();
extern void com_load();
extern void com_print();
extern void com_write();
extern void com_destroy();
extern void com_splot();
extern void com_setscale();
extern void com_transpose();
extern int raw_prec;
extern void raw_write();
extern struct plot *raw_read();
extern void com_rusage();
extern void ft_ckspace();
extern void init_rlimits();
extern void com_ac();
extern void com_dc();
extern void com_op();
extern void com_pz();
extern void com_sens();
extern void com_rset();
extern void com_resume();
extern void com_run();
extern void com_tran();
extern void com_tf();
extern void com_scirc();
extern void com_disto();
extern void com_noise();
extern int ft_dorun();
extern bool menumode;
extern bool ft_batchmode;
extern bool ft_nutmeg;
extern bool ft_servermode;
extern IFsimulator *ft_sim;
extern char *ft_rawfile;
extern char *cp_program;
extern void ft_sigintr();
extern void sigfloat();
extern void sigstop();
extern void sigquit();
extern void sigill();
extern void sigbus();
extern void sigsegv();
extern void sig_sys();
extern void main();
extern bool if_tranparams();
extern char *if_errstring();
extern char *if_inpdeck();
extern int if_run();
extern int if_sens_run();
extern struct variable *(*if_getparam)();
extern struct variable *nutif_getparam();
extern struct variable *spif_getparam();
extern void if_cktfree();
extern void if_dump();
extern int if_option();
extern void if_setndnames();
extern void if_setparam();
extern struct variable *if_getstat();
extern struct line *inp_deckcopy();
extern struct line *inp_subcktexpand();
extern int inp_numnodes();
extern void com_dftype();
extern void com_stype();
extern char *ft_typabbrev();
extern char *ft_typenames();
extern char *ft_plotabbrev();
extern int ft_typnum();
extern bool vec_eq();
extern int plot_num;
extern struct dvec *vec_fromplot();
extern struct dvec *vec_copy();
extern struct dvec *vec_get();
extern struct dvec *vec_mkfamily();
extern struct plot *plot_cur;
extern struct plot *plot_alloc();
extern struct plot *plot_list;
extern int plotl_changed;
extern void plot_add();
extern void vec_free();
extern void vec_gc();
extern void ft_loadfile();
extern void vec_new();
extern void plot_docoms();
extern void vec_remove();
extern void ft_sdatafree();
extern void plot_setcur();
extern void plot_new();
extern char *vec_basename();
extern bool plot_prefix();
extern void vec_transpose();
extern bool ft_intrpt;
extern bool ft_setflag;
extern int wrd_close();
extern int wrd_command();
extern int wrd_cptime;
extern int wrd_end();
extern int wrd_init();
extern int wrd_limpts;
extern int wrd_open();
extern int wrd_output();
extern int wrd_point();
extern int wrd_pt2();
extern int wrd_run();
extern int wrd_stopnow();
extern void wrd_chtrace();
extern void wrd_error();
extern void wrd_version();
extern wordlist *wrd_saves;
extern void xi_arc();
extern bool xi_init();
extern bool xi_dump();
extern void xi_clearscreen();
extern void xi_close();
extern void xi_drawline();
extern void xi_resetcolor();
extern void xi_setcolor();
extern void xi_setlinestyle();
extern void xi_text();
extern void xi_update();
extern void xi_zoomdata();
extern struct screen *screens;
extern void com_clearplot();
extern void com_reshape();
extern char *dimstring();
extern int atodims();
extern char *indexstring();
extern int incindex( );
struct dbcomm {
int db_number;
char db_type;
char *db_nodename1;
char *db_nodename2;
char *db_analysis;
int db_iteration;
char db_op;
double db_value1;
double db_value2;
int db_graphid;
struct dbcomm *db_also;
struct dbcomm *db_next;
} ;
static bool satisfied();
static void printcond();
void dbfree();
extern struct dbcomm *dbs;
extern int debugnumber;
static int howmanysteps = 0;
static int steps = 0;
void
com_stop(wl)
wordlist *wl;
{
struct dbcomm *d, *thisone = 0;
char *s, buf[64];
int i;
double *val;
while (wl) {
if (thisone == 0)
thisone = d = ((struct dbcomm *) tmalloc(sizeof(struct dbcomm)));
else {
d->db_also = ((struct dbcomm *) tmalloc(sizeof(struct dbcomm)));
d = d->db_also;
}
d->db_analysis = 0;
if ((!strcmp((wl->wl_word), ( "after"))) && wl->wl_next) {
d->db_type = 3;
d->db_number = debugnumber;
if (!wl->wl_next->wl_word)
i = 0;
else {
for (s = wl->wl_next->wl_word, i = 0; *s; s++)
if (!((_ctype + 1)[*s] & 0x00000004))
goto bad;
else
i = i * 10 + (*s - '0');
}
d->db_iteration = i;
wl = wl->wl_next->wl_next;
} else if ((!strcmp((wl->wl_word), ( "when"))) && wl->wl_next &&
wl->wl_next->wl_next &&
wl->wl_next->wl_next->wl_next) {
wl = wl->wl_next;
d->db_number = debugnumber;
d->db_type = 4;
s = wl->wl_word;
val = ft_numparse(&s, 0);
if (val)
d->db_value1 = *val;
else
d->db_nodename1 = copy(wl->wl_word);
wl = wl->wl_next;
if ((!strcmp((wl->wl_word), ( "eq"))) || (!strcmp((wl->wl_word), ( "="))))
d->db_op = 1;
else if ((!strcmp((wl->wl_word), ( "ne"))) || (!strcmp((wl->wl_word), ( "<>"))))
d->db_op = 2;
else if ((!strcmp((wl->wl_word), ( "gt"))) || (!strcmp((wl->wl_word), ( ">"))))
d->db_op = 3;
else if ((!strcmp((wl->wl_word), ( "lt"))) || (!strcmp((wl->wl_word), ( "<"))))
d->db_op = 4;
else if ((!strcmp((wl->wl_word), ( "ge"))) || (!strcmp((wl->wl_word), ( ">="))))
d->db_op = 5;
else if ((!strcmp((wl->wl_word), ( "le"))) || (!strcmp((wl->wl_word), ( "<="))))
d->db_op = 6;
else
goto bad;
wl = wl->wl_next;
s = wl->wl_word;
val = ft_numparse(&s, 0);
if (val)
d->db_value2 = *val;
else
d->db_nodename2 = copy(wl->wl_word);
wl = wl->wl_next;
} else
goto bad;
}
if (thisone) {
if (dbs) {
for (d = dbs; d->db_next; d = d->db_next);
d->db_next = thisone;
} else
dbs = thisone;
(void) sprintf(buf, "%d", debugnumber);
cp_addkword(4, buf);
debugnumber++;
}
return;
bad: fprintf(cp_err, "Syntax error parsing breakpoint specification.\n");
return;
}
void
com_trce(wl)
wordlist *wl;
{
settrace(wl, (1 << 4), 0);
return;
}
void
com_iplot(wl)
wordlist *wl;
{
struct dbcomm *d, *td, *currentdb = 0;
char *s;
while (wl) {
s = cp_unquote(wl->wl_word);
d = ((struct dbcomm *) tmalloc(sizeof(struct dbcomm)));
d->db_analysis = 0;
d->db_number = debugnumber++;
if ((!strcmp((s), ( "all")))) {
d->db_type = 6;
} else {
d->db_type = 5;
d->db_nodename1 = copy(s);
}
d->db_also = currentdb;
currentdb = d;
wl = wl->wl_next;
}
if (dbs) {
for (td = dbs; td->db_next; td = td->db_next)
;
td->db_next = currentdb;
} else
dbs = currentdb;
return;
}
void
com_step(wl)
wordlist *wl;
{
if (wl)
steps = howmanysteps = atoi(wl->wl_word);
else
steps = howmanysteps = 1;
com_resume((wordlist *) 0);
return;
}
void
com_sttus(wl)
wordlist *wl;
{
struct dbcomm *d, *dc;
for (d = dbs; d; d = d->db_next) {
if (d->db_type == 1) {
if (1)
fprintf(cp_out, "%-4d trace %s", d->db_number,
d->db_nodename1);
else
fprintf(cp_out, "trace %s", d->db_nodename1);
} else if (d->db_type == 5) {
if (1) {
fprintf(cp_out, "%-4d iplot %s", d->db_number,
d->db_nodename1);
} else {
fprintf(cp_out, "iplot %s", d->db_nodename1);
}
for (dc = d->db_also; dc; dc = dc->db_also) {
fprintf(cp_out, " %s", dc->db_nodename1);
}
} else if (d->db_type == 7) {
if (1)
fprintf(cp_out, "%-4d save %s", d->db_number,
d->db_nodename1);
else
fprintf(cp_out, "save %s", d->db_nodename1);
} else if (d->db_type == 2) {
if (1)
fprintf(cp_out, "%-4d trace all", d->db_number);
else
fprintf(cp_out, "trace all");
} else if (d->db_type == 6) {
if (1)
fprintf(cp_out, "%-4d iplot all", d->db_number);
else
fprintf(cp_out, "iplot all");
} else if (d->db_type == 8) {
if (1)
fprintf(cp_out, "%-4d save all", d->db_number);
else
fprintf(cp_out, "save all");
} else if ((d->db_type == 3) ||
(d->db_type == 4)) {
if (1)
fprintf(cp_out, "%-4d stop", d->db_number);
else
fprintf(cp_out, "stop");
printcond(d, cp_out);
} else if ((d->db_type == 9)) {
if (1) {
fprintf(cp_out, "%-4d exiting iplot %s", d->db_number,
d->db_nodename1);
} else {
fprintf(cp_out, "exiting iplot %s", d->db_nodename1);
}
for (dc = d->db_also; dc; dc = dc->db_also) {
fprintf(cp_out, " %s", dc->db_nodename1);
}
} else
fprintf(cp_err,
"com_sttus: Internal Error: bad db %d\n", d->db_type);
(void) (--( cp_out)->_cnt < 0 ? _flsbuf(('\n'), ( cp_out)) : (int) (*( cp_out)->_ptr++ = (unsigned char) ('\n')));
}
return;
}
void
dbfree(db)
struct dbcomm *db;
{
struct dbcomm *dd, *dn;
for (dd = db; dd; dd = dn) {
dn = dd->db_also;
(txfree(dd->db_nodename1), dd->db_nodename1 = 0);
(txfree(dd->db_nodename2), dd->db_nodename2 = 0);
(txfree(dd), dd = 0);
}
return;
}
void
com_delete(wl)
wordlist *wl;
{
int i;
char *s, buf[64];
struct dbcomm *d, *dt;
if (wl && (!strcmp((wl->wl_word), ( "all")))) {
for (dt = dbs; dt; dt = d) {
d = dt->db_next;
dbfree(dt);
}
dbs = 0;
return;
} else if (!wl) {
if (!dbs) {
fprintf(cp_err, "Error: no debugs in effect\n");
return;
}
}
while (wl) {
if (wl->wl_word) {
for (s = wl->wl_word, i = 0; *s; s++)
if (!((_ctype + 1)[*s] & 0x00000004)) {
fprintf(cp_err, "Error: %s isn't a number.\n",
wl->wl_word);
goto bad;
} else
i = i * 10 + (*s - '0');
} else
i = 0;
for (d = dbs, dt = 0; d; d = d->db_next) {
if (d->db_number == i) {
if (dt)
dt->db_next = d->db_next;
else
dbs = d->db_next;
dbfree(d);
(void) sprintf(buf, "%d", i);
cp_remkword(4, buf);
break;
}
dt = d;
}
bad: wl = wl->wl_next;
}
return;
}
bool
ft_bpcheck(runplot, iteration)
struct plot *runplot;
int iteration;
{
struct dbcomm *d, *dt;
if ((howmanysteps > 0) && (--howmanysteps == 0)) {
if (steps > 1)
fprintf(cp_err, "Stopped after %d steps.\n", steps);
return (0);
}
for (d = dbs; d; d = d->db_next) {
for (dt = d; dt; dt = dt->db_also) {
switch (dt->db_type) {
case 1:
case 2:
case 5:
case 9:
case 6:
case 7:
case 8:
goto more;
case 3:
if (iteration == dt->db_iteration)
break;
else
goto more;
case 4:
if (satisfied(dt, runplot))
break;
else
goto more;
default:
fprintf(cp_err, "ft_bpcheck: Internal Error: bad db %d\n",
dt->db_type);
}
}
if (dt == 0) {
fprintf(cp_err, "%-2d: condition met: stop ",
d->db_number);
printcond(d, cp_err);
(void) (--( cp_err)->_cnt < 0 ? _flsbuf(('\n'), ( cp_err)) : (int) (*( cp_err)->_ptr++ = (unsigned char) ('\n')));
return (0);
}
more: ;
}
return (1);
}
static bool
satisfied(d, plot)
struct dbcomm *d;
struct plot *plot;
{
struct dvec *v1 = 0, *v2 = 0;
double d1, d2;
if (d->db_nodename1) {
if ((v1 = vec_fromplot(d->db_nodename1, plot)) == 0) {
fprintf(cp_err, "Error: %s: no such node\n",
d->db_nodename1);
return (0);
}
if (((v1)->v_flags & (1 << 0)))
d1 = v1->v_realdata[v1->v_length - 1];
else
d1 = ((struct _complex *) (&(v1->v_compdata[v1->v_length - 1])))->cx_real;
} else
d1 = d->db_value1;
if (d->db_nodename2) {
if ((v2 = vec_fromplot(d->db_nodename2, plot)) == 0) {
fprintf(cp_err, "Error: %s: no such node\n",
d->db_nodename2);
return (0);
}
if (((v2)->v_flags & (1 << 0)))
d2 = v2->v_realdata[v2->v_length - 1];
else
d2 = ((struct _complex *) (&(v2->v_compdata[v2->v_length - 1])))->cx_real;
} else
d2 = d->db_value2;
switch (d->db_op) {
case 1:
return ((d1 == d2) ? 1 : 0);
case 2:
return ((d1 != d2) ? 1 : 0);
case 5:
return ((d1 >= d2) ? 1 : 0);
case 6:
return ((d1 <= d2) ? 1 : 0);
case 3:
return ((d1 > d2) ? 1 : 0);
case 4:
return ((d1 < d2) ? 1 : 0);
default:
fprintf(cp_err,
"satisfied: Internal Error: bad cond %d\n",
d->db_op);
return (0);
}
}
void
ft_trquery()
{
return;
}
static void
printcond(d, fp)
struct dbcomm *d;
FILE *fp;
{
struct dbcomm *dt;
for (dt = d; dt; dt = dt->db_also) {
if (dt->db_type == 3)
fprintf(fp, " after %ld",
dt->db_iteration);
else {
if (dt->db_nodename1)
fprintf(fp, " when %s",
dt->db_nodename1);
else
fprintf(fp, " when %lg",
dt->db_value1);
switch (dt->db_op) {
case 1:
fputs(" =", fp);
break;
case 2:
fputs(" <>", fp);
break;
case 3:
fputs(" >", fp);
break;
case 4:
fputs(" <", fp);
break;
case 5:
fputs(" >=", fp);
break;
case 6:
fputs(" <=", fp);
break;
default:
fprintf(cp_err,
"printcond: Internal Error: bad cond %d",
dt->db_op);
}
if (dt->db_nodename2)
fprintf(fp, " %s",
dt->db_nodename2);
else
fprintf(fp, " %lg",
dt->db_value2);
}
}
return;
}