@ -15,9 +15,13 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
# include "ngspice/ftedefs.h"
# include "ngspice/sim.h"
# include "ngspice/suffix.h"
# include "ngspice/compatmode.h"
# include "frontend/display.h"
# include "../misc/mktemp.h"
# include <errno.h>
FILE * cp_in = NULL ;
FILE * cp_out = NULL ;
FILE * cp_err = NULL ;
@ -31,6 +35,9 @@ bool ft_stricterror = FALSE;
bool ft_parsedb = FALSE ;
struct circ * ft_curckt = NULL ;
struct plot * plot_cur = NULL ;
int cp_maxhistlength = 0 ;
bool cp_no_histsubst = FALSE ;
struct compat newcompat ;
char * cp_program = " sconvert " ;
@ -45,6 +52,67 @@ char *cp_program = "sconvert";
fprintf ( cp_err , " Write error \n " ) ; \
return ; }
# define TMALLOC(t, n) (t*) tmalloc(sizeof(t) * (size_t)(n))
# define TREALLOC(t, p, n) (t*) trealloc(p, sizeof(t) * (size_t)(n))
char *
smktemp ( char * id )
{
if ( ! id )
id = " sp " ;
const char * const home = getenv ( " HOME " ) ;
if ( home ) {
return tprintf ( " %s/ " TEMPFORMAT , home , id , getpid ( ) ) ;
}
const char * const usr = getenv ( " USERPROFILE " ) ;
if ( usr ) {
return tprintf ( " %s \\ " TEMPFORMAT , usr , id , getpid ( ) ) ;
}
return tprintf ( TEMPFORMAT , id , getpid ( ) ) ;
}
int
inchar ( FILE * fp )
{
# if !defined(__MINGW32__)
char c ;
ssize_t i ;
do
i = read ( fileno ( fp ) , & c , 1 ) ;
while ( i = = - 1 & & errno = = EINTR ) ;
if ( i = = 0 | | c = = ' \004 ' )
return EOF ;
if ( i = = - 1 ) {
perror ( " read " ) ;
return EOF ;
}
return ( int ) c ;
# elif
return getc ( fp ) ;
# endif
}
int
input ( FILE * fp )
{
REQUEST request ;
RESPONSE response ;
request . option = char_option ;
request . fp = fp ;
Input ( & request , & response ) ;
return ( inchar ( fp ) ) ;
}
void
Input ( REQUEST * request , RESPONSE * response )
@ -74,7 +142,7 @@ fixdate(char *date)
buf [ i ] = buf [ i - 1 ] ;
buf [ 8 ] = ' ' ;
buf [ 18 ] = ' \0 ' ;
return ( copy ( buf ) ) ;
return ( strdup ( buf ) ) ;
}
@ -101,11 +169,11 @@ oldread(char *name)
for ( i = ( int ) strlen ( buf ) - 1 ; ( i > 1 ) & & ( buf [ i ] = = ' ' ) ; i - - )
;
buf [ i + 1 ] = ' \0 ' ;
pl - > pl_title = copy ( buf ) ;
pl - > pl_title = strdup ( buf ) ;
tfread ( buf , 1 , 16 , fp ) ;
buf [ 16 ] = ' \0 ' ;
pl - > pl_date = copy ( fixdate ( buf ) ) ;
pl - > pl_date = strdup ( fixdate ( buf ) ) ;
tfread ( & nv , sizeof ( short ) , 1 , fp ) ;
@ -124,7 +192,7 @@ oldread(char *name)
end = v ;
tfread ( buf , 1 , 8 , fp ) ;
buf [ 8 ] = ' \0 ' ;
v - > v_name = copy ( buf ) ;
v - > v_name = strdup ( buf ) ;
}
for ( v = pl - > pl_dvecs ; v ; v = v - > v_next ) {
tfread ( & a , sizeof ( short ) , 1 , fp ) ;
@ -151,7 +219,7 @@ oldread(char *name)
}
tfread ( buf , 1 , 24 , fp ) ;
buf [ 24 ] = ' \0 ' ;
pl - > pl_name = copy ( buf ) ;
pl - > pl_name = strdup ( buf ) ;
/* Now to figure out how many points of data there are left in
* the file .
*/
@ -319,12 +387,6 @@ main(int ac, char **av)
char * infile = NULL ;
char * outfile = NULL ;
FILE * fp ;
cp_in = stdin ;
cp_out = stdout ;
cp_err = stderr ;
cp_curin = stdin ;
cp_curout = stdout ;
cp_curerr = stderr ;
switch ( ac ) {
case 5 :
@ -352,7 +414,7 @@ main(int ac, char **av)
case 1 : printf ( " Input file: " ) ;
( void ) fflush ( stdout ) ;
( void ) fgets ( buf , BSIZE_SP , stdin ) ;
sf = copy ( buf ) ;
sf = strdup ( buf ) ;
printf ( " Input type: " ) ;
( void ) fflush ( stdout ) ;
( void ) fgets ( buf , BSIZE_SP , stdin ) ;
@ -360,7 +422,7 @@ main(int ac, char **av)
printf ( " Output file: " ) ;
( void ) fflush ( stdout ) ;
( void ) fgets ( buf , BSIZE_SP , stdin ) ;
af = copy ( buf ) ;
af = strdup ( buf ) ;
printf ( " Output type: " ) ;
( void ) fflush ( stdout ) ;
( void ) fgets ( buf , BSIZE_SP , stdin ) ;
@ -425,6 +487,7 @@ main(int ac, char **av)
exit ( EXIT_NORMAL ) ;
}
void cp_pushcontrol ( void ) { }
void cp_popcontrol ( void ) { }
void out_init ( void ) { }
@ -432,7 +495,7 @@ void cp_doquit(void) { exit(0); }
struct variable * cp_usrvars ( void ) { return NULL ; }
int cp_evloop ( char * s ) { NG_IGNORE ( s ) ; return ( 0 ) ; }
void cp_ccon ( bool o ) { NG_IGNORE ( o ) ; }
char * if_errstring ( int c ) { NG_IGNORE ( c ) ; return copy ( " error " ) ; }
char * if_errstring ( int c ) { NG_IGNORE ( c ) ; return strdup ( " error " ) ; }
void out_printf ( char * fmt , . . . ) { NG_IGNORE ( fmt ) ; }
void out_send ( char * string ) { NG_IGNORE ( string ) ; }
struct variable * cp_enqvar ( const char * word , int * tbfreed ) { NG_IGNORE ( word ) ; NG_IGNORE ( * tbfreed ) ; return ( NULL ) ; }
@ -446,5 +509,7 @@ int cp_usrset(struct variable *v, bool i) {
NG_IGNORE ( v ) ; return ( US_OK ) ; }
wordlist * cp_doalias ( wordlist * wlist ) { NG_IGNORE ( wlist ) ; return NULL ; }
void controlled_exit ( int no ) { exit ( no ) ; }
int disptype ;