xref: /plan9/sys/src/cmd/unix/drawterm/libc/netmkaddr.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier #include <ctype.h>
4*8ccd4a63SDavid du Colombier 
5*8ccd4a63SDavid du Colombier /*
6*8ccd4a63SDavid du Colombier  *  make an address, add the defaults
7*8ccd4a63SDavid du Colombier  */
8*8ccd4a63SDavid du Colombier char *
netmkaddr(char * linear,char * defnet,char * defsrv)9*8ccd4a63SDavid du Colombier netmkaddr(char *linear, char *defnet, char *defsrv)
10*8ccd4a63SDavid du Colombier {
11*8ccd4a63SDavid du Colombier 	static char addr[256];
12*8ccd4a63SDavid du Colombier 	char *cp;
13*8ccd4a63SDavid du Colombier 
14*8ccd4a63SDavid du Colombier 	/*
15*8ccd4a63SDavid du Colombier 	 *  dump network name
16*8ccd4a63SDavid du Colombier 	 */
17*8ccd4a63SDavid du Colombier 	cp = strchr(linear, '!');
18*8ccd4a63SDavid du Colombier 	if(cp == 0){
19*8ccd4a63SDavid du Colombier 		if(defnet==0){
20*8ccd4a63SDavid du Colombier 			if(defsrv)
21*8ccd4a63SDavid du Colombier 				snprint(addr, sizeof(addr), "net!%s!%s",
22*8ccd4a63SDavid du Colombier 					linear, defsrv);
23*8ccd4a63SDavid du Colombier 			else
24*8ccd4a63SDavid du Colombier 				snprint(addr, sizeof(addr), "net!%s", linear);
25*8ccd4a63SDavid du Colombier 		}
26*8ccd4a63SDavid du Colombier 		else {
27*8ccd4a63SDavid du Colombier 			if(defsrv)
28*8ccd4a63SDavid du Colombier 				snprint(addr, sizeof(addr), "%s!%s!%s", defnet,
29*8ccd4a63SDavid du Colombier 					linear, defsrv);
30*8ccd4a63SDavid du Colombier 			else
31*8ccd4a63SDavid du Colombier 				snprint(addr, sizeof(addr), "%s!%s", defnet,
32*8ccd4a63SDavid du Colombier 					linear);
33*8ccd4a63SDavid du Colombier 		}
34*8ccd4a63SDavid du Colombier 		return addr;
35*8ccd4a63SDavid du Colombier 	}
36*8ccd4a63SDavid du Colombier 
37*8ccd4a63SDavid du Colombier 	/*
38*8ccd4a63SDavid du Colombier 	 *  if there is already a service, use it
39*8ccd4a63SDavid du Colombier 	 */
40*8ccd4a63SDavid du Colombier 	cp = strchr(cp+1, '!');
41*8ccd4a63SDavid du Colombier 	if(cp)
42*8ccd4a63SDavid du Colombier 		return linear;
43*8ccd4a63SDavid du Colombier 
44*8ccd4a63SDavid du Colombier 	/*
45*8ccd4a63SDavid du Colombier 	 *  add default service
46*8ccd4a63SDavid du Colombier 	 */
47*8ccd4a63SDavid du Colombier 	if(defsrv == 0)
48*8ccd4a63SDavid du Colombier 		return linear;
49*8ccd4a63SDavid du Colombier 	snprint(addr, sizeof(addr), "%s!%s", linear, defsrv);
50*8ccd4a63SDavid du Colombier 
51*8ccd4a63SDavid du Colombier 	return addr;
52*8ccd4a63SDavid du Colombier }
53