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