+#include <sys/types.h>
+#include <sys/stat.h>
+
+/* lnall-
+ * son of mvall, son of cpall, son of ...
+ */
+
+char buf[100];
+
+main(argc, argv)
+char **argv;
+{
+ register char *c1, *c2, *cp;
+ int i;
+
+ if(argc < 3) {
+ write(2, "arg count\n", 10);
+ exit();
+ }
+ argc--;
+ if (!dir(argv[argc]))
+ {
+ printf("%s: not a directory\n", argv[argc]);
+ exit(1);
+ }
+ c1 = buf;
+ c2 = argv[argc];
+ while(*c1++ = *c2++);
+ c1[-1] = '/';
+ for(i=1; i<argc; i++)
+ {
+ c2 = c1;
+ cp = (char *) actual(argv[i]);
+ while (*c2++ = *cp++);
+ if (link(argv[i],buf)) perror(argv[i]);
+ }
+}
+
+dir(n)
+ char *n;
+{
+ struct stat statbuf;
+ if (stat(n,&statbuf)) return(0);
+ return((statbuf.st_mode & 060000) == 040000);
+}
+
+actual(str)
+ char *str;
+{
+ register char *f;
+ register slash;
+ f = str;
+ slash = 0;
+ while (*f) if (*f++ == '/') slash++;
+ if (!slash) return(str);
+ while (*f != '/') --f;
+ ++f;
+ return(f);
+}
+
+