#include #include struct _uname { char sysname[65]; char nodename[65]; char release[65]; char version[65]; char machine[65]; char domainname[65]; } this_uname; extern int uname(struct _uname *); int length(char *); char *opts(int, char **, char *); typedef void (*CPUID)(char *); int main(int argc, char *argv[]) { char vendor[13], *f; unsigned char cpuid[] = {0xc8, 0x04, 0x00, 0x00, 0x56, 0x8b, 0x75, 0x08, 0x31, 0xc0, 0x0f, 0xa2, 0x89, 0x1e, 0x89, 0x56, /* just don't ask! */ 0x04, 0x89, 0x4e, 0x08, 0xc6, 0x46, 0x0c, 0x00, 0x5e, 0xC9, 0xC3}; int s, n, r, v, m, c, h; CPUID cpuidf = (CPUID) cpuid; s = n = r = v = m = c = h = 0; if (uname(&this_uname) != 0) return 1; if ((f = opts(argc, argv, "snrvmcah"))) for (; *f; f++) switch(*f) { case 's': s = 1; break; case 'n': n = 1; break; case 'r': r = 1; break; case 'v': v = 1; break; case 'm': m = 1; break; case 'c': c = 1; break; case 'a': s = n = r = v = m = c = 1; break; case 'h': h = 1; break; default: h = 1; } else s = 1; if (h) { printf("usage: %s [-snrvmcah]\n\t-s\tOS name\n\t-n\tnetwork node name\n\t-r\tOS release\n\t-v\tOS version\n\t-m\tmachine type\n\t-c\tcpu name\n\t-a\tall information\n\t-h\tthis help\n", argv[0]); return 0; } (s) ? printf("%s ", this_uname.sysname) :0; (n) ? printf("%s ", this_uname.nodename):0; (r) ? printf("%s ", this_uname.release) :0; (v) ? printf("%s ", this_uname.version) :0; (m) ? printf("%s ", this_uname.machine) :0; (c) ? cpuidf(vendor), printf(vendor) :0; printf("\n"); return 0; } int length(char *s) { int l = 0; while (*s) l++, s++; return l; } char *opts(int argc, char *argv[], char *o) { int i, z, j = 0, l = length(o); char *buffer = malloc(1024); if (argc < 2) return 0; for (i=1; i