commit a8c15b08ca39ae9fa8d50f9e338d341c09fa57dd from: rsc date: Wed Apr 21 05:34:37 2004 UTC Include looks in #9/acid now. Acid works harder at not falling over. commit - eaf56db5bc78cfec908db84dc792c53ac8ffb90e commit + a8c15b08ca39ae9fa8d50f9e338d341c09fa57dd blob - 290b3c6947eb5cf5490d6af48e332e89e73b0a06 blob + 787e2e5177a504854960d4fab6658d53ae36e6b5 --- src/cmd/acid/builtin.c +++ 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; blob - bbfb47b15cf8d8c796d24c95bd9c70c09ecec20f blob + d978407fd8effd2c9c93c534decb5b7fafc2dd10 --- src/cmd/acid/lex.c +++ 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"); blob - a40416c28da45c9f4776d39a4ad057aeb8feb3e9 blob + 355fd5b70132339b223a18069f9a8655080c8715 --- src/cmd/acid/util.c +++ 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;