]> git.lizzy.rs Git - plan9front.git/blob - sys/src/ape/cmd/uname.c
import updated compilers from sources
[plan9front.git] / sys / src / ape / cmd / uname.c
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 void
34 main(int argc, char **argv)
35 {
36         struct utsname u;
37
38         uname(&u);
39         if(argc == 1){
40                 printf("%s\n", u.sysname);
41                 exit(0);
42         }
43         ARGBEGIN {
44         case 'a':
45                 prword(u.sysname);
46                 prword(u.nodename);
47                 prword(u.release);
48                 prword(u.version);
49                 prword(u.machine);
50                 break;
51         case 'm':
52                 prword(u.machine);
53                 break;
54         case 'n':
55                 prword(u.nodename);
56                 break;
57         case 'r':
58                 prword(u.release);
59                 break;
60         case 's':
61                 prword(u.sysname);
62                 break;
63         case 'v':
64                 prword(u.version);
65                 break;
66         } ARGEND
67         printf("\n");
68         exit(0);
69 }