+
+/*
+ * huhcon
+ * Connect to an unspecific thing
+ */
+
+struct device *huhcon(dev)
+register char *dev;
+{
+ register struct device *dp, *dcp;
+ struct device rdev;
+
+ /*
+ * First make certain that there are some of these to wildcard on
+ */
+ for (dp = dtab; dp != NULL; dp = dp->d_next)
+ if (eq(dp->d_name, dev))
+ break;
+ if (dp == NULL)
+ {
+ yyerror(sprintf(errbuf, "no %s's to wildcard", dev));
+ return NULL;
+ }
+ dcp = dp->d_conn;
+ /*
+ * Now see if there is already a wildcard entry for this device
+ */
+ for (; dp != NULL; dp = dp->d_next)
+ if (eq(dev, dp->d_name) && dp->d_unit == -1)
+ break;
+ /*
+ * If there isn't, make one
+ */
+ if (dp == NULL)
+ {
+ dp = &rdev;
+ init_dev(dp);
+ dp->d_unit = -1;
+ dp->d_name = ns(dev);
+ newdev(dp);
+ dp = dtab;
+ /*
+ * Connect it to the same thing that other similar things are
+ * connected to, but make sure it is a wildcard unit
+ */
+ if (dcp == -1 || dcp == NULL)
+ dp->d_conn = dcp;
+ else
+ dp->d_conn = connect(dcp->d_name, -1);
+ }
+ return dp;
+}
+
+init_dev(dp)
+register struct device *dp;
+{
+ dp->d_name = "OHNO!!!";
+ dp->d_type = DEVICE;
+ dp->d_conn = NULL;
+ dp->d_vec1 = dp->d_vec2 = NULL;
+ dp->d_addr = dp->d_flags = dp->d_dk = 0;
+ dp->d_slave = -1;
+ dp->d_drive = dp->d_unit = -17;
+}