* frontend/Makefile.am: Updates for new files.
* frontend/breakp2.c, frontend/newcoms.c, frontend/postcoms.c, frontend/resource.c, frontend/terminal.h, frontend/variable.c, frontend/variable.h, frontend/com_compose.c, frontend/com_display.c, frontend/com_setscale.c, frontend/com_strcmp.c: Include files update. * parser/var2.c, parser/var2.h: Empty files, removed. * parser/Makefile.am: Updates for removed files. * parser/lexical.c: Small adjustments * parser/input.c, parser/input.h: Input, output and error streams handled in the frontend. Moved to the frontend directory. * frontend/streams.c: Its new home.
This commit is contained in:
parent
8d342f4295
commit
f85551ea17
|
|
@ -15,10 +15,12 @@ libfte_a_SOURCES = \
|
|||
com_asciiplot.h \
|
||||
com_cdump.c \
|
||||
com_cdump.h \
|
||||
com_chdir.c \
|
||||
com_compose.c \
|
||||
com_compose.h \
|
||||
com_display.c \
|
||||
com_display.h \
|
||||
com_echo.c \
|
||||
com_ghelp.c \
|
||||
com_ghelp.h \
|
||||
com_hardcopy.c \
|
||||
|
|
@ -31,9 +33,11 @@ libfte_a_SOURCES = \
|
|||
com_let.h \
|
||||
com_plot.c \
|
||||
com_plot.h \
|
||||
com_rehash.c \
|
||||
com_set.c \
|
||||
com_setscale.c \
|
||||
com_setscale.h \
|
||||
com_shell.c \
|
||||
com_shift.c \
|
||||
com_strcmp.c \
|
||||
com_strcmp.h \
|
||||
|
|
@ -48,7 +52,10 @@ libfte_a_SOURCES = \
|
|||
hcomp.h \
|
||||
init.c \
|
||||
init.h \
|
||||
quote.c \
|
||||
quote.h \
|
||||
streams.h \
|
||||
streams.c \
|
||||
terminal.c \
|
||||
terminal.h \
|
||||
variable.c \
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
|||
#include "ftedefs.h"
|
||||
#include "dvec.h"
|
||||
#include "ftedebug.h"
|
||||
|
||||
#include "quote.h"
|
||||
#include "breakp2.h"
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include <fteext.h>
|
||||
#include <cpextern.h>
|
||||
|
||||
#include "quote.h"
|
||||
#include "com_compose.h"
|
||||
#include "completion.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <cpextern.h>
|
||||
|
||||
#include "com_display.h"
|
||||
#include "quote.h"
|
||||
#include "variable.h"
|
||||
#include "plotting/plotting.h"
|
||||
#include "plotting/pvec.h"
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
#include <ngspice.h>
|
||||
#include <bool.h>
|
||||
#include <dvec.h>
|
||||
#include <cpextern.h>
|
||||
|
||||
#include "vectors.h"
|
||||
#include "com_setscale.h"
|
||||
#include "quote.h"
|
||||
#include "streams.h"
|
||||
#include "vectors.h"
|
||||
#include "plotting/plotting.h"
|
||||
#include "plotting/pvec.h"
|
||||
|
||||
|
||||
/* 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
|
||||
com_setscale(wordlist *wl)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
#include <config.h>
|
||||
#include <ngspice.h>
|
||||
|
||||
#include <bool.h>
|
||||
#include <wordlist.h>
|
||||
|
||||
#include "com_strcmp.h"
|
||||
#include "quote.h"
|
||||
#include "variable.h"
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,9 @@ Copyright 1992 Regents of the University of California. All rights reserved.
|
|||
#include "ftedefs.h"
|
||||
#include "fteparse.h"
|
||||
#include "dvec.h"
|
||||
#include "newcoms.h"
|
||||
|
||||
#include "newcoms.h"
|
||||
#include "quote.h"
|
||||
|
||||
/*
|
||||
* reshape v(1) vxx#branch [10]
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
|||
#include <sim.h>
|
||||
#include <plot.h>
|
||||
|
||||
#include "postcoms.h"
|
||||
#include "completion.h"
|
||||
#include "postcoms.h"
|
||||
#include "quote.h"
|
||||
#include "variable.h"
|
||||
|
||||
/* static declarations */
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
|||
#include "ftedefs.h"
|
||||
|
||||
#include "circuits.h"
|
||||
#include "quote.h"
|
||||
#include "resource.h"
|
||||
#include "variable.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef _TERMINAL_H
|
||||
#define _TERMINAL_H
|
||||
|
||||
extern bool out_isatty;
|
||||
|
||||
void out_init(void);
|
||||
void outbufputc(void);
|
||||
void promptreturn(void);
|
||||
|
|
|
|||
|
|
@ -17,9 +17,10 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
|||
#include <inpdefs.h>
|
||||
|
||||
#include "circuits.h"
|
||||
#include "variable.h"
|
||||
#include "streams.h"
|
||||
#include "com_history.h"
|
||||
#include "quote.h"
|
||||
#include "streams.h"
|
||||
#include "variable.h"
|
||||
|
||||
|
||||
bool cp_noglob = TRUE;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@ struct xxx {
|
|||
|
||||
|
||||
extern struct variable *variables;
|
||||
extern bool cp_noglob;
|
||||
extern bool cp_nonomatch;
|
||||
extern bool cp_noclobber;
|
||||
extern bool cp_ignoreeof;
|
||||
|
||||
// extern struct variable *variables;
|
||||
wordlist * cp_varwl(struct variable *var);
|
||||
|
|
|
|||
|
|
@ -17,13 +17,9 @@ libparser_a_SOURCES = \
|
|||
lexical.h \
|
||||
numparse.c \
|
||||
numparse.h \
|
||||
quote.c \
|
||||
quote.h \
|
||||
std.c \
|
||||
unixcom.c \
|
||||
unixcom.h \
|
||||
var2.c \
|
||||
var2.h \
|
||||
wlist.c \
|
||||
wlist.h
|
||||
|
||||
|
|
|
|||
|
|
@ -6,28 +6,55 @@ Author: 1988 Jeffrey M. Hsu
|
|||
/*
|
||||
* Stand-alone input routine.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <ngspice.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "ngspice.h"
|
||||
#include "fteinput.h"
|
||||
#include "input.h"
|
||||
#include "cpextern.h"
|
||||
|
||||
|
||||
extern int inchar(FILE *fp);
|
||||
|
||||
void
|
||||
Input(REQUEST *request, RESPONSE *response)
|
||||
/* 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)
|
||||
{
|
||||
|
||||
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;
|
||||
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 void Input(REQUEST *req, RESPONSE *resp);
|
||||
|
||||
int
|
||||
input(FILE *fp)
|
||||
{
|
||||
|
||||
REQUEST request;
|
||||
RESPONSE response;
|
||||
|
||||
request.option = char_option;
|
||||
request.fp = fp;
|
||||
Input(&request, &response);
|
||||
return(response.reply.ch);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@
|
|||
#define INPUT_H_INCLUDED
|
||||
|
||||
|
||||
void Input(REQUEST *request, RESPONSE *response);
|
||||
int inchar(FILE *fp);
|
||||
int input(FILE *fp);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -57,8 +57,6 @@ char cp_hash = '#';
|
|||
static int numeofs = 0;
|
||||
|
||||
|
||||
extern void Input();
|
||||
|
||||
#define ESCAPE '\033'
|
||||
|
||||
/* Return a list of words, with backslash quoting and '' quoting done.
|
||||
|
|
@ -314,46 +312,3 @@ prompt(void)
|
|||
(void) fflush(cp_out);
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
@ -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…
Reference in New Issue