Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}