1*219b2ee8SDavid du Colombier #include <stdlib.h> 2*219b2ee8SDavid du Colombier #include <sys/utsname.h> 3*219b2ee8SDavid du Colombier #include <stdio.h> 4*219b2ee8SDavid du Colombier 5*219b2ee8SDavid du Colombier #define ARGBEGIN for((argv0=*argv),argv++,argc--;\ 6*219b2ee8SDavid du Colombier argv[0] && argv[0][0]=='-' && argv[0][1];\ 7*219b2ee8SDavid du Colombier argc--, argv++) {\ 8*219b2ee8SDavid du Colombier char *_args, *_argt, _argc;\ 9*219b2ee8SDavid du Colombier _args = &argv[0][1];\ 10*219b2ee8SDavid du Colombier if(_args[0]=='-' && _args[1]==0){\ 11*219b2ee8SDavid du Colombier argc--; argv++; break;\ 12*219b2ee8SDavid du Colombier }\ 13*219b2ee8SDavid du Colombier while(*_args) switch(_argc=*_args++) 14*219b2ee8SDavid du Colombier #define ARGEND } 15*219b2ee8SDavid du Colombier #define ARGF() (_argt=_args, _args="",\ 16*219b2ee8SDavid du Colombier (*_argt? _argt: argv[1]? (argc--, *++argv): 0)) 17*219b2ee8SDavid du Colombier #define ARGC() _argc 18*219b2ee8SDavid du Colombier char *argv0; 19*219b2ee8SDavid du Colombier 20*219b2ee8SDavid du Colombier main(int argc, char **argv) 21*219b2ee8SDavid du Colombier { 22*219b2ee8SDavid du Colombier struct utsname u; 23*219b2ee8SDavid du Colombier 24*219b2ee8SDavid du Colombier uname(&u); 25*219b2ee8SDavid du Colombier if(argc == 1){ 26*219b2ee8SDavid du Colombier printf("%s\n", u.sysname); 27*219b2ee8SDavid du Colombier exit(0); 28*219b2ee8SDavid du Colombier } 29*219b2ee8SDavid du Colombier ARGBEGIN { 30*219b2ee8SDavid du Colombier case 'a': 31*219b2ee8SDavid du Colombier printf("%s %s %s %s %s\n", u.sysname, u.nodename, 32*219b2ee8SDavid du Colombier u.release, u.version, u.machine); 33*219b2ee8SDavid du Colombier break; 34*219b2ee8SDavid du Colombier case 'm': 35*219b2ee8SDavid du Colombier printf("%s\n", u.machine); 36*219b2ee8SDavid du Colombier break; 37*219b2ee8SDavid du Colombier case 'n': 38*219b2ee8SDavid du Colombier printf("%s\n", u.nodename); 39*219b2ee8SDavid du Colombier break; 40*219b2ee8SDavid du Colombier case 'r': 41*219b2ee8SDavid du Colombier printf("%s\n", u.release); 42*219b2ee8SDavid du Colombier break; 43*219b2ee8SDavid du Colombier case 's': 44*219b2ee8SDavid du Colombier printf("%s\n", u.sysname); 45*219b2ee8SDavid du Colombier break; 46*219b2ee8SDavid du Colombier case 'v': 47*219b2ee8SDavid du Colombier printf("%s\n", u.version); 48*219b2ee8SDavid du Colombier break; 49*219b2ee8SDavid du Colombier } ARGEND 50*219b2ee8SDavid du Colombier exit(0); 51*219b2ee8SDavid du Colombier } 52