home *** CD-ROM | disk | FTP | other *** search
- #include "uucp.h"
-
-
- #define LSIZE 30 /* number of systems to store */
- #define WSUFSIZE 6 /* work file name suffix size */
-
- /*******
- * gnsys(sname, dir, pre)
- * char *sname, *dir, pre;
- *
- * gnsys - this routine will return the next
- * system name which has work to be done.
- * "pre" is the prefix for work files.
- * "dir" is the directory to search.
- * "sname" is a string of size DIRSIZ - WSUFSIZE.
- *
- * return codes:
- * 0 - no more names
- * 1 - name returned in sname
- * FAIL - bad directory
- */
-
- gnsys(sname, dir, pre)
- char *sname, *dir, pre;
- {
- char *s, *p1, *p2;
- char px[3];
- static char *list[LSIZE];
- static int nitem=0, n=0;
- char sysname[NAMESIZE], filename[NAMESIZE];
- FILE *fp;
-
- px[0] = pre;
- px[1] = '.';
- px[2] = '\0';
- if (nitem == 0) {
- /* get list of systems with work */
- int i;
- fp = fopen(dir, "r");
- ASSERT(fp != NULL, "BAD DIRECTRY %s\n", dir);
- for (i = 0; i < LSIZE; i++)
- list[i] = NULL;
- while (gnamef(fp, filename) != 0) {
- if (!prefix(px, filename))
- continue;
- p2 = filename + strlen(filename)
- - WSUFSIZE;
- p1 = filename + strlen(px);
- for(s = sysname; p1 <= p2; p1++)
- *s++ = *p1;
- *s = '\0';
- if (sysname[0] == '\0')
- continue;
- if (callok(sysname) == 0)
- nitem = srchst(sysname, list, nitem);
- if (LSIZE <= nitem) break;
- }
-
- fclose(fp);
- }
-
- if (nitem == 0)
- return(0);
- if (nitem <= n ) {
- for (n = 0; n < nitem; n++)
- if (list[n] != NULL)
- free(list[n]);
- nitem = n = 0;
- return(0);
- }
-
- strcpy(sname, list[n++]);
- return(1);
- }
-
- /***
- * srchst(name, list, n)
- * char *name, **list;
- * int n;
- *
- * srchst - this routine will do a linear search
- * of list (list) to find name (name).
- * If the name is not found, it is added to the
- * list.
- * The number of items in the list (n) is
- * returned (incremented if a name is added).
- *
- * return codes:
- * n - the number of items in the list
- */
-
- srchst(name, list, n)
- char *name, **list;
- int n;
- {
- int i;
- char *p;
- extern char *calloc();
-
- for (i = 0; i < n; i++)
- if (strcmp(name, list[i]) == 0)
- break;
- if (i >= n) {
- if ((p = calloc(strlen(name) + 1, sizeof (char)))
- == NULL)
- return(n);
- strcpy(p, name);
- list[n++] = p;
- }
- return(n);
- }
-