xref: /plan9/sys/src/ape/cmd/uname.c (revision 027288c8a8763d34db13dc89d8bcd6514dbc2163)
1490c40c5SDavid du Colombier #include <stdio.h>
2219b2ee8SDavid du Colombier #include <stdlib.h>
3219b2ee8SDavid du Colombier #include <sys/utsname.h>
4219b2ee8SDavid du Colombier 
5219b2ee8SDavid du Colombier #define	ARGBEGIN	for((argv0=*argv),argv++,argc--;\
6219b2ee8SDavid du Colombier 			    argv[0] && argv[0][0]=='-' && argv[0][1];\
7219b2ee8SDavid du Colombier 			    argc--, argv++) {\
8219b2ee8SDavid du Colombier 				char *_args, *_argt, _argc;\
9219b2ee8SDavid du Colombier 				_args = &argv[0][1];\
10219b2ee8SDavid du Colombier 				if(_args[0]=='-' && _args[1]==0){\
11219b2ee8SDavid du Colombier 					argc--; argv++; break;\
12219b2ee8SDavid du Colombier 				}\
13219b2ee8SDavid du Colombier 				while(*_args) switch(_argc=*_args++)
14219b2ee8SDavid du Colombier #define	ARGEND		}
15219b2ee8SDavid du Colombier #define	ARGF()		(_argt=_args, _args="",\
16219b2ee8SDavid du Colombier 				(*_argt? _argt: argv[1]? (argc--, *++argv): 0))
17219b2ee8SDavid du Colombier #define	ARGC()		_argc
18490c40c5SDavid du Colombier 
19219b2ee8SDavid du Colombier char *argv0;
20219b2ee8SDavid du Colombier 
21490c40c5SDavid du Colombier static int started;
22490c40c5SDavid du Colombier 
23490c40c5SDavid du Colombier static void
prword(char * w)24490c40c5SDavid du Colombier prword(char *w)
25490c40c5SDavid du Colombier {
26490c40c5SDavid du Colombier 	if (started)
27490c40c5SDavid du Colombier 		putchar(' ');
28490c40c5SDavid du Colombier 	else
29490c40c5SDavid du Colombier 		started = 1;
30490c40c5SDavid du Colombier 	fputs(w, stdout);
31490c40c5SDavid du Colombier }
32490c40c5SDavid du Colombier 
33*027288c8SDavid du Colombier void
main(int argc,char ** argv)34219b2ee8SDavid du Colombier main(int argc, char **argv)
35219b2ee8SDavid du Colombier {
36219b2ee8SDavid du Colombier 	struct utsname u;
37219b2ee8SDavid du Colombier 
38219b2ee8SDavid du Colombier 	uname(&u);
39219b2ee8SDavid du Colombier 	if(argc == 1){
40219b2ee8SDavid du Colombier 		printf("%s\n", u.sysname);
41219b2ee8SDavid du Colombier 		exit(0);
42219b2ee8SDavid du Colombier 	}
43219b2ee8SDavid du Colombier 	ARGBEGIN {
44219b2ee8SDavid du Colombier 	case 'a':
45490c40c5SDavid du Colombier 		prword(u.sysname);
46490c40c5SDavid du Colombier 		prword(u.nodename);
47490c40c5SDavid du Colombier 		prword(u.release);
48490c40c5SDavid du Colombier 		prword(u.version);
49490c40c5SDavid du Colombier 		prword(u.machine);
50219b2ee8SDavid du Colombier 		break;
51219b2ee8SDavid du Colombier 	case 'm':
52490c40c5SDavid du Colombier 		prword(u.machine);
53219b2ee8SDavid du Colombier 		break;
54219b2ee8SDavid du Colombier 	case 'n':
55490c40c5SDavid du Colombier 		prword(u.nodename);
56219b2ee8SDavid du Colombier 		break;
57219b2ee8SDavid du Colombier 	case 'r':
58490c40c5SDavid du Colombier 		prword(u.release);
59219b2ee8SDavid du Colombier 		break;
60219b2ee8SDavid du Colombier 	case 's':
61490c40c5SDavid du Colombier 		prword(u.sysname);
62219b2ee8SDavid du Colombier 		break;
63219b2ee8SDavid du Colombier 	case 'v':
64490c40c5SDavid du Colombier 		prword(u.version);
65219b2ee8SDavid du Colombier 		break;
66219b2ee8SDavid du Colombier 	} ARGEND
67c54d4d90SDavid du Colombier 	printf("\n");
68219b2ee8SDavid du Colombier 	exit(0);
69219b2ee8SDavid du Colombier }
70