Browse Source

* frontend/Makefile.am: Updates for new files.


			
			
				pre-master-46
			
			
		
arno 26 years ago
parent
commit
f85551ea17
  1. 7
      src/frontend/Makefile.am
  2. 2
      src/frontend/breakp2.c
  3. 1
      src/frontend/com_compose.c
  4. 1
      src/frontend/com_display.c
  5. 10
      src/frontend/com_setscale.c
  6. 4
      src/frontend/com_strcmp.c
  7. 3
      src/frontend/newcoms.c
  8. 3
      src/frontend/postcoms.c
  9. 1
      src/frontend/resource.c
  10. 211
      src/frontend/streams.c
  11. 2
      src/frontend/terminal.h
  12. 5
      src/frontend/variable.c
  13. 4
      src/frontend/variable.h
  14. 4
      src/parser/Makefile.am
  15. 57
      src/parser/input.c
  16. 3
      src/parser/input.h
  17. 45
      src/parser/lexical.c
  18. 13
      src/parser/var2.c
  19. 21
      src/parser/var2.h

7
src/frontend/Makefile.am

@ -15,10 +15,12 @@ libfte_a_SOURCES = \
com_asciiplot.h \ com_asciiplot.h \
com_cdump.c \ com_cdump.c \
com_cdump.h \ com_cdump.h \
com_chdir.c \
com_compose.c \ com_compose.c \
com_compose.h \ com_compose.h \
com_display.c \ com_display.c \
com_display.h \ com_display.h \
com_echo.c \
com_ghelp.c \ com_ghelp.c \
com_ghelp.h \ com_ghelp.h \
com_hardcopy.c \ com_hardcopy.c \
@ -31,9 +33,11 @@ libfte_a_SOURCES = \
com_let.h \ com_let.h \
com_plot.c \ com_plot.c \
com_plot.h \ com_plot.h \
com_rehash.c \
com_set.c \ com_set.c \
com_setscale.c \ com_setscale.c \
com_setscale.h \ com_setscale.h \
com_shell.c \
com_shift.c \ com_shift.c \
com_strcmp.c \ com_strcmp.c \
com_strcmp.h \ com_strcmp.h \
@ -48,7 +52,10 @@ libfte_a_SOURCES = \
hcomp.h \ hcomp.h \
init.c \ init.c \
init.h \ init.h \
quote.c \
quote.h \
streams.h \ streams.h \
streams.c \
terminal.c \ terminal.c \
terminal.h \ terminal.h \
variable.c \ variable.c \

2
src/frontend/breakp2.c

@ -12,6 +12,8 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include "ftedefs.h" #include "ftedefs.h"
#include "dvec.h" #include "dvec.h"
#include "ftedebug.h" #include "ftedebug.h"
#include "quote.h"
#include "breakp2.h" #include "breakp2.h"

1
src/frontend/com_compose.c

@ -9,6 +9,7 @@
#include <fteext.h> #include <fteext.h>
#include <cpextern.h> #include <cpextern.h>
#include "quote.h"
#include "com_compose.h" #include "com_compose.h"
#include "completion.h" #include "completion.h"

1
src/frontend/com_display.c

@ -5,6 +5,7 @@
#include <cpextern.h> #include <cpextern.h>
#include "com_display.h" #include "com_display.h"
#include "quote.h"
#include "variable.h" #include "variable.h"
#include "plotting/plotting.h" #include "plotting/plotting.h"
#include "plotting/pvec.h" #include "plotting/pvec.h"

10
src/frontend/com_setscale.c

@ -1,15 +1,17 @@
#include <ngspice.h> #include <ngspice.h>
#include <bool.h>
#include <dvec.h> #include <dvec.h>
#include <cpextern.h>
#include "vectors.h"
#include "com_setscale.h" #include "com_setscale.h"
#include "quote.h"
#include "streams.h"
#include "vectors.h"
#include "plotting/plotting.h" #include "plotting/plotting.h"
#include "plotting/pvec.h" #include "plotting/pvec.h"
/* Set the default scale to the named vector. If no vector named, /* Set the default scale to the named vector. If no vector named,
* find and print the default scale.
*/
* find and print the default scale. */
void void
com_setscale(wordlist *wl) com_setscale(wordlist *wl)
{ {

4
src/frontend/com_strcmp.c

@ -1,7 +1,11 @@
#include <config.h>
#include <ngspice.h>
#include <bool.h> #include <bool.h>
#include <wordlist.h> #include <wordlist.h>
#include "com_strcmp.h" #include "com_strcmp.h"
#include "quote.h"
#include "variable.h" #include "variable.h"

3
src/frontend/newcoms.c

@ -11,8 +11,9 @@ Copyright 1992 Regents of the University of California. All rights reserved.
#include "ftedefs.h" #include "ftedefs.h"
#include "fteparse.h" #include "fteparse.h"
#include "dvec.h" #include "dvec.h"
#include "newcoms.h"
#include "newcoms.h"
#include "quote.h"
/* /*
* reshape v(1) vxx#branch [10] * reshape v(1) vxx#branch [10]

3
src/frontend/postcoms.c

@ -14,8 +14,9 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include <sim.h> #include <sim.h>
#include <plot.h> #include <plot.h>
#include "postcoms.h"
#include "completion.h" #include "completion.h"
#include "postcoms.h"
#include "quote.h"
#include "variable.h" #include "variable.h"
/* static declarations */ /* static declarations */

1
src/frontend/resource.c

@ -13,6 +13,7 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include "ftedefs.h" #include "ftedefs.h"
#include "circuits.h" #include "circuits.h"
#include "quote.h"
#include "resource.h" #include "resource.h"
#include "variable.h" #include "variable.h"

211
src/frontend/streams.c

@ -0,0 +1,211 @@
#include <config.h>
#include <ngspice.h>
#include <wordlist.h>
#include <bool.h>
#include "variable.h"
#include "terminal.h"
#include "quote.h"
#include "streams.h"
bool cp_debug = FALSE;
char cp_gt = '>';
char cp_lt = '<';
char cp_amp = '&';
FILE *cp_in;
FILE *cp_out;
FILE *cp_err;
/* These are the fps that cp_ioreset resets the cp_* to. They are
* changed by the source routines. */
FILE *cp_curin = NULL;
FILE *cp_curout = NULL;
FILE *cp_curerr = NULL;
static bool
fileexists(char *name)
{
#ifdef HAVE_ACCESS
if (access(name, 0) == 0)
return (TRUE);
#endif
return (FALSE);
}
/* This routine sets the cp_{in,out,err} pointers and takes the io
* directions out of the command line. */
wordlist *
cp_redirect(wordlist *wl)
{
bool gotinput = FALSE, gotoutput = FALSE, goterror = FALSE;
bool app = FALSE, erralso = FALSE;
wordlist *w, *bt, *nw;
char *s;
FILE *tmpfp;
w = wl->wl_next; /* Don't consider empty commands. */
while (w) {
if (*w->wl_word == cp_lt) {
bt = w;
if (gotinput) {
fprintf(cp_err,
"Error: ambiguous input redirect.\n");
goto error;
}
gotinput = TRUE;
w = w->wl_next;
if (w == NULL) {
fprintf(cp_err,
"Error: missing name for input.\n");
return (NULL);
}
if (*w->wl_word == cp_lt) {
/* Do reasonable stuff here... */
} else {
tmpfp = fopen(cp_unquote(w->wl_word), "r");
if (!tmpfp) {
perror(w->wl_word);
goto error;
} else
cp_in = tmpfp;
}
#ifdef CPDEBUG
if (cp_debug)
fprintf(cp_err, "Input file is %s...\n",
w->wl_word);
#endif
bt->wl_prev->wl_next = w->wl_next;
if (w->wl_next)
w->wl_next->wl_prev = bt->wl_prev;
nw = w->wl_next;
w->wl_next = NULL;
w = nw;
wl_free(bt);
} else if (*w->wl_word == cp_gt) {
bt = w;
if (gotoutput) {
fprintf(cp_err,
"Error: ambiguous output redirect.\n");
goto error;
}
gotoutput = TRUE;
w = w->wl_next;
if (w == NULL) {
fprintf(cp_err,
"Error: missing name for output.\n");
return (NULL);
}
if (*w->wl_word == cp_gt) {
app = TRUE;
w = w->wl_next;
if (w == NULL) {
fprintf(cp_err,
"Error: missing name for output.\n");
return (NULL);
}
}
if (*w->wl_word == cp_amp) {
erralso = TRUE;
if (goterror) {
fprintf(cp_err,
"Error: ambiguous error redirect.\n");
return (NULL);
}
goterror = TRUE;
w = w->wl_next;
if (w == NULL) {
fprintf(cp_err,
"Error: missing name for output.\n");
return (NULL);
}
}
s = cp_unquote(w->wl_word);
if (cp_noclobber && fileexists(s)) {
fprintf(stderr, "Error: %s: file exists\n", s);
goto error;
}
if (app)
tmpfp = fopen(s, "a");
else
tmpfp = fopen(s, "w+");
if (!tmpfp) {
perror(w->wl_word);
goto error;
} else {
cp_out = tmpfp;
out_isatty = FALSE;
}
#ifdef CPDEBUG
if (cp_debug)
fprintf(cp_err, "Output file is %s... %s\n",
w->wl_word, app ? "(append)" : "");
#endif
bt->wl_prev->wl_next = w->wl_next;
if (w->wl_next)
w->wl_next->wl_prev = bt->wl_prev;
w = w->wl_next;
if (w)
w->wl_prev->wl_next = NULL;
wl_free(bt);
if (erralso)
cp_err = cp_out;
} else
w = w->wl_next;
}
return (wl);
error: wl_free(wl);
return (NULL);
}
/* Reset the cp_* FILE pointers to the standard ones. This is tricky,
* since if we are sourcing a command file, and io has been redirected
* from inside the file, we have to reset it back to what it was for
* the source, not for the top level. That way if you type "foo >
* bar" where foo is a script, and it has redirections of its own
* inside of it, none of the output from foo will get sent to
* stdout... */
void
cp_ioreset(void)
{
if (cp_in != cp_curin) {
if (cp_in)
fclose(cp_in);
cp_in = cp_curin;
}
if (cp_out != cp_curout) {
if (cp_out)
fclose(cp_out);
cp_out = cp_curout;
}
if (cp_err != cp_curerr) {
if (cp_err)
fclose(cp_err);
cp_err = cp_curerr;
}
/*** Minor bug here... */
out_isatty = TRUE;
return;
}
/* Do this only right before an exec, since we lose the old std*'s. */
void
fixdescriptors(void)
{
if (cp_in != stdin)
dup2(fileno(cp_in), fileno(stdin));
if (cp_out != stdout)
dup2(fileno(cp_out), fileno(stdout));
if (cp_err != stderr)
dup2(fileno(cp_err), fileno(stderr));
return;
}

2
src/frontend/terminal.h

@ -1,6 +1,8 @@
#ifndef _TERMINAL_H #ifndef _TERMINAL_H
#define _TERMINAL_H #define _TERMINAL_H
extern bool out_isatty;
void out_init(void); void out_init(void);
void outbufputc(void); void outbufputc(void);
void promptreturn(void); void promptreturn(void);

5
src/frontend/variable.c

@ -17,9 +17,10 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include <inpdefs.h> #include <inpdefs.h>
#include "circuits.h" #include "circuits.h"
#include "variable.h"
#include "streams.h"
#include "com_history.h" #include "com_history.h"
#include "quote.h"
#include "streams.h"
#include "variable.h"
bool cp_noglob = TRUE; bool cp_noglob = TRUE;

4
src/frontend/variable.h

@ -38,6 +38,10 @@ struct xxx {
extern struct variable *variables; extern struct variable *variables;
extern bool cp_noglob;
extern bool cp_nonomatch;
extern bool cp_noclobber;
extern bool cp_ignoreeof;
// extern struct variable *variables; // extern struct variable *variables;
wordlist * cp_varwl(struct variable *var); wordlist * cp_varwl(struct variable *var);

4
src/parser/Makefile.am

@ -17,13 +17,9 @@ libparser_a_SOURCES = \
lexical.h \ lexical.h \
numparse.c \ numparse.c \
numparse.h \ numparse.h \
quote.c \
quote.h \
std.c \ std.c \
unixcom.c \ unixcom.c \
unixcom.h \ unixcom.h \
var2.c \
var2.h \
wlist.c \ wlist.c \
wlist.h wlist.h

57
src/parser/input.c

@ -6,28 +6,55 @@ Author: 1988 Jeffrey M. Hsu
/* /*
* Stand-alone input routine. * Stand-alone input routine.
*/ */
#include <config.h>
#include <ngspice.h>
#include <errno.h>
#include "ngspice.h"
#include "fteinput.h" #include "fteinput.h"
#include "input.h" #include "input.h"
#include "cpextern.h"
/* A special 'getc' so that we can deal with ^D properly. There is no way for
* stdio to know if we have typed a ^D after some other characters, so
* don't use buffering at all
*/
int
inchar(FILE *fp)
{
char c;
int i;
if (cp_interactive && !cp_nocc) {
do {
i = read((int) fileno(fp), &c, 1);
} while (i == -1 && errno == EINTR);
if (i == 0 || c == '\004')
return (EOF);
else if (i == -1) {
perror("read");
return (EOF);
} else
return ((int) c);
} else
c = getc(fp);
return ((int) c);
}
extern int inchar(FILE *fp);
void
Input(REQUEST *request, RESPONSE *response)
extern void Input(REQUEST *req, RESPONSE *resp);
int
input(FILE *fp)
{ {
switch (request->option) {
case char_option:
response->reply.ch = inchar(request->fp);
response->option = request->option;
break;
default:
/* just ignore, since we don't want a million error messages */
response->option = error_option;
break;
}
return;
REQUEST request;
RESPONSE response;
request.option = char_option;
request.fp = fp;
Input(&request, &response);
return(response.reply.ch);
} }

3
src/parser/input.h

@ -7,7 +7,8 @@
#define INPUT_H_INCLUDED #define INPUT_H_INCLUDED
void Input(REQUEST *request, RESPONSE *response);
int inchar(FILE *fp);
int input(FILE *fp);
#endif #endif

45
src/parser/lexical.c

@ -57,8 +57,6 @@ char cp_hash = '#';
static int numeofs = 0; static int numeofs = 0;
extern void Input();
#define ESCAPE '\033' #define ESCAPE '\033'
/* Return a list of words, with backslash quoting and '' quoting done. /* Return a list of words, with backslash quoting and '' quoting done.
@ -314,46 +312,3 @@ prompt(void)
(void) fflush(cp_out); (void) fflush(cp_out);
return; return;
} }
/* A special 'getc' so that we can deal with ^D properly. There is no way for
* stdio to know if we have typed a ^D after some other characters, so
* don't use buffering at all
*/
int
inchar(FILE *fp)
{
char c;
int i;
if (cp_interactive && !cp_nocc) {
do {
i = read((int) fileno(fp), &c, 1);
} while (i == -1 && errno == EINTR);
if (i == 0 || c == '\004')
return (EOF);
else if (i == -1) {
perror("read");
return (EOF);
} else
return ((int) c);
} else
c = getc(fp);
return ((int) c);
}
int
input(FILE *fp)
{
REQUEST request;
RESPONSE response;
request.option = char_option;
request.fp = fp;
Input(&request, &response);
return(response.reply.ch);
}

13
src/parser/var2.c

@ -1,13 +0,0 @@
/**********
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
**********/
/*
* Do variable substitution.
*/
#include "ngspice.h"
#include "cpdefs.h"
#include "var2.h"

21
src/parser/var2.h

@ -1,21 +0,0 @@
/*************
* Header file for var2.c
* 1999 E. Rouat
************/
#ifndef VAR2_H_INCLUDED
#define VAR2_H_INCLUDED
wordlist * cp_variablesubst(wordlist *wlist);
wordlist * vareval(char *string);
void cp_vprint(void);
void com_set(wordlist *wl);
void com_unset(wordlist *wl);
void com_shift(wordlist *wl);
bool cp_getvar(char *name, int type, char *retval);
#endif
Loading…
Cancel
Save