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