aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/acid
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-04-21 05:34:37 +0000
committerrsc <devnull@localhost>2004-04-21 05:34:37 +0000
commita8c15b08ca39ae9fa8d50f9e338d341c09fa57dd (patch)
treeffe19f2f3aaebc2dfe03d32d1614082aa9f85e8f /src/cmd/acid
parenteaf56db5bc78cfec908db84dc792c53ac8ffb90e (diff)
downloadplan9port-a8c15b08ca39ae9fa8d50f9e338d341c09fa57dd.tar.gz
plan9port-a8c15b08ca39ae9fa8d50f9e338d341c09fa57dd.tar.bz2
plan9port-a8c15b08ca39ae9fa8d50f9e338d341c09fa57dd.zip
Include looks in #9/acid now.
Acid works harder at not falling over.
Diffstat (limited to 'src/cmd/acid')
-rw-r--r--src/cmd/acid/builtin.c16
-rw-r--r--src/cmd/acid/lex.c14
-rw-r--r--src/cmd/acid/util.c2
3 files changed, 26 insertions, 6 deletions
diff --git a/src/cmd/acid/builtin.c b/src/cmd/acid/builtin.c
index 290b3c69..787e2e51 100644
--- a/src/cmd/acid/builtin.c
+++ b/src/cmd/acid/builtin.c
@@ -478,6 +478,8 @@ interpret(Node *r, Node *args)
void
include(Node *r, Node *args)
{
+ char *file, *libfile;
+ static char buf[1024];
Node res;
int isave;
@@ -488,7 +490,19 @@ include(Node *r, Node *args)
error("include(string): arg type");
Bflush(bout);
- pushfile(res.store.u.string->string);
+
+ libfile = nil;
+ file = res.store.u.string->string;
+ if(access(file, AREAD) < 0 && file[0] != '/'){
+ snprint(buf, sizeof buf, "#9/acid/%s", file);
+ libfile = unsharp(buf);
+ if(access(libfile, AREAD) >= 0){
+ strecpy(buf, buf+sizeof buf, libfile);
+ file = buf;
+ }
+ free(libfile);
+ }
+ pushfile(file);
isave = interactive;
interactive = 0;
diff --git a/src/cmd/acid/lex.c b/src/cmd/acid/lex.c
index bbfb47b1..d978407f 100644
--- a/src/cmd/acid/lex.c
+++ b/src/cmd/acid/lex.c
@@ -76,6 +76,7 @@ struct IOstack
IOstack *prev;
};
IOstack *lexio;
+uint nlexio;
void
setacidfile(void)
@@ -100,6 +101,9 @@ pushfile(char *file)
Biobuf *b;
IOstack *io;
+ if(nlexio > 64)
+ error("too many includes");
+
if(file)
b = Bopen(file, OREAD);
else{
@@ -122,6 +126,7 @@ pushfile(char *file)
io->fin = b;
io->prev = lexio;
lexio = io;
+ nlexio++;
setacidfile();
}
@@ -156,6 +161,7 @@ pushstr(Node *s)
io->ip = io->text;
io->fin = 0;
io->prev = lexio;
+ nlexio++;
lexio = io;
setacidfile();
}
@@ -190,6 +196,7 @@ popio(void)
s = lexio;
lexio = s->prev;
free(s);
+ nlexio--;
setacidfile();
return 1;
}
@@ -197,18 +204,17 @@ popio(void)
int
Zfmt(Fmt *f)
{
- int i;
- char buf[1024];
+ char buf[1024], *p;
IOstack *e;
e = lexio;
if(e) {
- i = sprint(buf, "%s:%d", e->name, line);
+ p = seprint(buf, buf+sizeof buf, "%s:%d", e->name, line);
while(e->prev) {
e = e->prev;
if(initialising && e->prev == 0)
break;
- i += sprint(buf+i, " [%s:%d]", e->name, e->line);
+ p = seprint(p, buf+sizeof buf, " [%s:%d]", e->name, e->line);
}
} else
sprint(buf, "no file:0");
diff --git a/src/cmd/acid/util.c b/src/cmd/acid/util.c
index a40416c2..355fd5b7 100644
--- a/src/cmd/acid/util.c
+++ b/src/cmd/acid/util.c
@@ -36,7 +36,7 @@ unique(char *buf, Symbol *s)
}
}
if(renamed && !quiet)
- print("\t%s=%s %c/%Z\n", s->name, buf, s->type, s->loc);
+ print("\t%s=%s %c/%L\n", s->name, buf, s->type, s->loc);
if(l == 0)
l = enter(buf, Tid);
return l;