remove searching print; check fids in use; handle addr correctly again
diff --git a/src/cmd/acme/addr.c b/src/cmd/acme/addr.c
index 4e31d6a..7af5f6b 100644
--- a/src/cmd/acme/addr.c
+++ b/src/cmd/acme/addr.c
@@ -138,7 +138,6 @@
 			q = Infinity;
 		else
 			q = lim.q1;
-warning(nil, "searching %d-%d\n", r.q1, q);
 		found = rxexecute(t, nil, r.q1, q, &sel);
 	}
 	if(!found && showerr)
diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c
index 66b935f..536a333 100644
--- a/src/cmd/acme/fsys.c
+++ b/src/cmd/acme/fsys.c
@@ -160,10 +160,24 @@
 		if(fcall[x->fcall.type] == 0)
 			x = respond(x, &t, "bad fcall type");
 		else{
-			if(x->fcall.type==Tversion || x->fcall.type==Tauth)
+			switch(x->fcall.type){
+			case Tversion:
+			case Tauth:
+			case Tflush:
 				f = nil;
-			else
+				break;
+			case Tattach:
 				f = newfid(x->fcall.fid);
+				break;
+			default:
+				f = newfid(x->fcall.fid);
+				if(!f->busy){
+					x->f = f;
+					x = respond(x, &t, "fid not in use");
+					continue;
+				}
+				break;
+			}
 			x->f = f;
 			x  = (*fcall[x->fcall.type])(x, f);
 		}
diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c
index 13d7295..579f194 100644
--- a/src/cmd/acme/xfid.c
+++ b/src/cmd/acme/xfid.c
@@ -103,8 +103,14 @@
 		q = FILE(x->f->qid);
 		switch(q){
 		case QWaddr:
+			if(w->nopen[q]++ == 0){
+				w->addr = range(0, 0);
+				w->limit = range(-1,-1);
+			}
+			break;
+		case QWdata:
+		case QWxdata:
 			w->nopen[q]++;
-			w->limit = range(-1,-1);
 			break;
 		case QWevent:
 			if(w->nopen[q]++ == 0){