1 /* 2 * Copyright (c) 1983 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char sccsid[] = "@(#)cu.c 5.9 (Berkeley) 06/01/90"; 10 #endif /* not lint */ 11 12 #include "tip.h" 13 14 void cleanup(); 15 16 /* 17 * Botch the interface to look like cu's 18 */ 19 cumain(argc, argv) 20 char *argv[]; 21 { 22 register int i; 23 static char sbuf[12]; 24 25 if (argc < 2) { 26 printf("usage: cu telno [-t] [-s speed] [-a acu] [-l line] [-#]\n"); 27 exit(8); 28 } 29 CU = DV = NOSTR; 30 BR = DEFBR; 31 for (; argc > 1; argv++, argc--) { 32 if (argv[1][0] != '-') 33 PN = argv[1]; 34 else switch (argv[1][1]) { 35 36 case 't': 37 HW = 1, DU = -1; 38 --argc; 39 continue; 40 41 case 'a': 42 CU = argv[2]; ++argv; --argc; 43 break; 44 45 case 's': 46 if (argc < 3 || speed(atoi(argv[2])) == 0) { 47 fprintf(stderr, "cu: unsupported speed %s\n", 48 argv[2]); 49 exit(3); 50 } 51 BR = atoi(argv[2]); ++argv; --argc; 52 break; 53 54 case 'l': 55 DV = argv[2]; ++argv; --argc; 56 break; 57 58 case '0': case '1': case '2': case '3': case '4': 59 case '5': case '6': case '7': case '8': case '9': 60 if (CU) 61 CU[strlen(CU)-1] = argv[1][1]; 62 if (DV) 63 DV[strlen(DV)-1] = argv[1][1]; 64 break; 65 66 default: 67 printf("Bad flag %s", argv[1]); 68 break; 69 } 70 } 71 signal(SIGINT, cleanup); 72 signal(SIGQUIT, cleanup); 73 signal(SIGHUP, cleanup); 74 signal(SIGTERM, cleanup); 75 76 /* 77 * The "cu" host name is used to define the 78 * attributes of the generic dialer. 79 */ 80 (void)sprintf(sbuf, "cu%d", BR); 81 if ((i = hunt(sbuf)) == 0) { 82 printf("all ports busy\n"); 83 exit(3); 84 } 85 if (i == -1) { 86 printf("link down\n"); 87 (void)uu_unlock(uucplock); 88 exit(3); 89 } 90 setbuf(stdout, NULL); 91 loginit(); 92 user_uid(); 93 vinit(); 94 setparity("none"); 95 boolean(value(VERBOSE)) = 0; 96 if (HW) 97 ttysetup(speed(BR)); 98 if (connect()) { 99 printf("Connect failed\n"); 100 daemon_uid(); 101 (void)uu_unlock(uucplock); 102 exit(1); 103 } 104 if (!HW) 105 ttysetup(speed(BR)); 106 } 107