Commit Diff


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;