xref: /plan9-contrib/sys/src/ape/cmd/uname.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <stdlib.h>
2 #include <sys/utsname.h>
3 #include <stdio.h>
4 
5 #define	ARGBEGIN	for((argv0=*argv),argv++,argc--;\
6 			    argv[0] && argv[0][0]=='-' && argv[0][1];\
7 			    argc--, argv++) {\
8 				char *_args, *_argt, _argc;\
9 				_args = &argv[0][1];\
10 				if(_args[0]=='-' && _args[1]==0){\
11 					argc--; argv++; break;\
12 				}\
13 				while(*_args) switch(_argc=*_args++)
14 #define	ARGEND		}
15 #define	ARGF()		(_argt=_args, _args="",\
16 				(*_argt? _argt: argv[1]? (argc--, *++argv): 0))
17 #define	ARGC()		_argc
18 char *argv0;
19 
20 main(int argc, char **argv)
21 {
22 	struct utsname u;
23 
24 	uname(&u);
25 	if(argc == 1){
26 		printf("%s\n", u.sysname);
27 		exit(0);
28 	}
29 	ARGBEGIN {
30 	case 'a':
31 		printf("%s %s %s %s %s\n", u.sysname, u.nodename,
32 			u.release, u.version, u.machine);
33 		break;
34 	case 'm':
35 		printf("%s\n", u.machine);
36 		break;
37 	case 'n':
38 		printf("%s\n", u.nodename);
39 		break;
40 	case 'r':
41 		printf("%s\n", u.release);
42 		break;
43 	case 's':
44 		printf("%s\n", u.sysname);
45 		break;
46 	case 'v':
47 		printf("%s\n", u.version);
48 		break;
49 	} ARGEND
50 	exit(0);
51 }
52