This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

EGCS 1.1.1 compile-time error on SPARC/Solaris for breakp.c from spice3f5



/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;
}



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]