1: #ifndef lint
2: static char sccsid[] = "@(#)gename.c 5.2 (Berkeley) 7/19/83";
3: #endif
4:
5: #include "uucp.h"
6: #include <sys/types.h>
7:
8: #define SEQLEN 4
9:
10: /*******
11: * gename(pre, sys, grade, file) generate file name
12: * char grade, *sys, pre, *file;
13: *
14: * return codes: none
15: */
16:
17: gename(pre, sys, grade, file)
18: char pre, *sys, grade, *file;
19: {
20: static char sqnum[5];
21:
22: getseq(sqnum);
23: sprintf(file, "%c.%.7s%c%.*s", pre, sys, grade, SEQLEN, sqnum);
24: DEBUG(4, "file - %s\n", file);
25: return;
26: }
27:
28:
29: #define SLOCKTIME 10L
30: #define SLOCKTRIES 5
31:
32: /*******
33: * getseq(snum) get next sequence number
34: * char *snum;
35: *
36: * return codes: none
37: */
38:
39: static
40: getseq(snum)
41: register char *snum;
42: {
43: /*
44: * the alphabet can be anything, but if it's not in ascii order,
45: * sequence ordering is not preserved
46: */
47: char *alphabet =
48: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
49: register int i, fd;
50: static char *lastchar;
51:
52: if (lastchar == NULL || (snum[SEQLEN-1] = *(lastchar++)) == '\0') {
53: for (i = 0; i < SLOCKTRIES; i++) {
54: if (!ulockf(SEQLOCK, (time_t)SLOCKTIME))
55: break;
56: sleep(5);
57: }
58:
59: ASSERT(i < SLOCKTRIES, "CAN NOT GET", "SEQLOCK", 0);
60:
61: if ((fd = open(SEQFILE, 2)) >= 0) {
62: int alphalen;
63: register char *p;
64: char *index();
65:
66: alphalen = strlen(alphabet);
67: read(fd, snum, SEQLEN);
68: /* increment the penultimate character */
69: for (i = SEQLEN - 2; i >= 0; --i) {
70: if ((p = index(alphabet, snum[i])) == NULL) {
71: /* drastic but effective */
72: snum[i] = alphabet[alphalen - 1];
73: DEBUG(6, "bad seqf: %s\n", snum);
74: }
75: if (++p < &alphabet[alphalen]) {
76: snum[i] = *p;
77: break;
78: } else /* carry */
79: snum[i] = alphabet[0]; /* continue */
80: }
81: snum[SEQLEN-1] = alphabet[0];
82: } else {
83: if ((fd = creat(SEQFILE, 0666)) < 0)
84: return(FAIL);
85: for (i = 0; i < SEQLEN; i++)
86: snum[i] = alphabet[0];
87: }
88:
89: lseek(fd, 0L, 0);
90: write(fd, snum, SEQLEN);
91: close(fd);
92: rmlock(SEQLOCK);
93: lastchar = alphabet + 1;
94: }
95: return(0);
96: }
Defined functions
gename
defined in line
17; used 13 times
Defined variables
sccsid
defined in line
2;
never used
Defined macros
SEQLEN
defined in line
8; used 7 times