|
|
1.1 root 1: #include <sys/ioctl.h>
2: #include <stdio.h>
3:
4: static char *names[] = {
5: "/dev/dk/dk0%c%d",
6: "/dev/dk/dk2%c%d",
7: "/dev/dk/dkctl0",
8: "/dev/dk/dkctl2",
9: "/dev/dk/dk%c%d",
10: "/dev/dk/dkctl",
11: 0
12: };
13:
14: static char *namefmt;
15: static char alph[] = "0123456789abcdefghijklmnopqrstuvwxyz";
16:
17: /*
18: * open channel 1 to controller
19: * leave record of file name
20: */
21: dkctlchan(traffic)
22: register traffic;
23: {
24: register i ;
25: extern int rdk_ld, dkp_ld ;
26: char dk01file[32];
27:
28: namefmt = traffic? names[1]:names[0];
29: sprintf(dk01file, namefmt, alph[0], 1);
30: i = open(dk01file, 2) ;
31: if (i < 0) {
32: sprintf(dk01file, traffic?names[3]:names[2]) ;
33: i = open(dk01file, 2) ;
34: if (i < 0) {
35: namefmt = names[4];
36: sprintf(dk01file, namefmt, alph[0], 1);
37: i = open(dk01file, 2);
38: if (i < 0) {
39: sprintf(dk01file, names[5]) ;
40: i = open(dk01file, 2);
41: if (i < 0)
42: return (i) ;
43: }
44: }
45: }
46: ioctl(i, DIOCNXCL, 0);
47: if (ioctl(i, FIOLOOKLD, 0) != rdk_ld) {
48: if (dkproto(i, dkp_ld) < 0) {
49: fprintf(stderr, "can't start dkp on %s\n", dk01file) ;
50: close(i) ;
51: return (-1) ;
52: }
53: if (ioctl(i, FIOPUSHLD, &rdk_ld) < 0) {
54: fprintf(stderr, "can't push rdk_ld on %s\n", dk01file) ;
55: close(i) ;
56: return (-1) ;
57: }
58: if (ioctl(i, DIOCLHN, (char *)0) < 0) {
59: fprintf(stderr, "can't be manager on %s\n", dk01file) ;
60: close(i);
61: return(-1);
62: }
63: }
64: return (i) ;
65: }
66:
67: /*
68: * find the file name corresponding to a given channel.
69: * assumes dkctlchan has been called.
70: * Used for incoming calls.
71: */
72:
73: char *
74: dkfilename(chan)
75: {
76: static char name[64];
77:
78: if (namefmt==NULL)
79: return(NULL);
80: sprintf(name, namefmt, alph[chan/10], chan%10);
81: return(name);
82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.