xref: /plan9-contrib/sys/src/ape/cmd/uname.c (revision 3468a4915d661daa200976acc4f80f51aae144b2)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/utsname.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 
19 char *argv0;
20 
21 static int started;
22 
23 static void
24 prword(char *w)
25 {
26 	if (started)
27 		putchar(' ');
28 	else
29 		started = 1;
30 	fputs(w, stdout);
31 }
32 
33 main(int argc, char **argv)
34 {
35 	struct utsname u;
36 
37 	uname(&u);
38 	if(argc == 1){
39 		printf("%s\n", u.sysname);
40 		exit(0);
41 	}
42 	ARGBEGIN {
43 	case 'a':
44 		prword(u.sysname);
45 		prword(u.nodename);
46 		prword(u.release);
47 		prword(u.version);
48 		prword(u.machine);
49 		break;
50 	case 'm':
51 		prword(u.machine);
52 		break;
53 	case 'n':
54 		prword(u.nodename);
55 		break;
56 	case 'r':
57 		prword(u.release);
58 		break;
59 	case 's':
60 		prword(u.sysname);
61 		break;
62 	case 'v':
63 		prword(u.version);
64 		break;
65 	} ARGEND
66 	printf("\n");
67 	exit(0);
68 }
69