commit - eaf56db5bc78cfec908db84dc792c53ac8ffb90e
commit + a8c15b08ca39ae9fa8d50f9e338d341c09fa57dd
blob - 290b3c6947eb5cf5490d6af48e332e89e73b0a06
blob + 787e2e5177a504854960d4fab6658d53ae36e6b5
--- src/cmd/acid/builtin.c
+++ src/cmd/acid/builtin.c
void
include(Node *r, Node *args)
{
+ char *file, *libfile;
+ static char buf[1024];
Node res;
int isave;
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;
blob - bbfb47b15cf8d8c796d24c95bd9c70c09ecec20f
blob + d978407fd8effd2c9c93c534decb5b7fafc2dd10
--- src/cmd/acid/lex.c
+++ src/cmd/acid/lex.c
IOstack *prev;
};
IOstack *lexio;
+uint nlexio;
void
setacidfile(void)
Biobuf *b;
IOstack *io;
+ if(nlexio > 64)
+ error("too many includes");
+
if(file)
b = Bopen(file, OREAD);
else{
io->fin = b;
io->prev = lexio;
lexio = io;
+ nlexio++;
setacidfile();
}
io->ip = io->text;
io->fin = 0;
io->prev = lexio;
+ nlexio++;
lexio = io;
setacidfile();
}
s = lexio;
lexio = s->prev;
free(s);
+ nlexio--;
setacidfile();
return 1;
}
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");
blob - a40416c28da45c9f4776d39a4ad057aeb8feb3e9
blob + 355fd5b70132339b223a18069f9a8655080c8715
--- src/cmd/acid/util.c
+++ src/cmd/acid/util.c
}
}
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;