* reordered a little bit
[mascara-docs.git] / i86 / elks / elkscmd / sh_utils / uname.c
blobebac6e33876f1ebad210beff548b22676774b79e
1 #include <unistd.h>
2 #include <string.h>
3 #include <sys/utsname.h>
5 static void print_element ();
7 /* Values that are bitwise or'd into toprint'. */
8 /* Operating system name. */
9 #define PRINT_SYSNAME 1
11 /* Node name on a communications network. */
12 #define PRINT_NODENAME 2
14 /* Operating system release. */
15 #define PRINT_RELEASE 4
17 /* Operating system version. */
18 #define PRINT_VERSION 8
20 /* Machine hardware name. */
21 #define PRINT_MACHINE 16
23 /* Mask indicating which elements of the name to print. */
24 static unsigned char toprint;
26 void
27 main (argc, argv)
28 int argc;
29 char **argv;
31 int i;
32 struct utsname name;
34 toprint = 0;
36 for(i=1;i<argc;i++)
38 switch(argv[i][1])
40 case 's':
41 toprint |= PRINT_SYSNAME;
42 break;
44 case 'n':
45 toprint |= PRINT_NODENAME;
46 break;
48 case 'r':
49 toprint |= PRINT_RELEASE;
50 break;
52 case 'v':
53 toprint |= PRINT_VERSION;
54 break;
56 case 'm':
57 toprint |= PRINT_MACHINE;
58 break;
60 case 'a':
61 toprint = PRINT_SYSNAME | PRINT_NODENAME |
62 PRINT_RELEASE | PRINT_VERSION | PRINT_MACHINE;
63 break;
65 default:
66 break;
69 if (toprint == 0)
70 toprint = PRINT_SYSNAME;
71 if (uname (&name) != -1)
73 print_element (PRINT_SYSNAME, name.sysname);
74 print_element (PRINT_NODENAME, name.nodename);
75 print_element (PRINT_RELEASE, name.release);
76 print_element (PRINT_VERSION, name.version);
77 print_element (PRINT_MACHINE, name.machine);
80 exit(0);
83 static void
84 print_element (mask, element)
85 unsigned char mask;
86 char *element;
88 if (toprint & mask)
90 toprint &= ~mask;
91 write(STDOUT_FILENO,element,strlen(element));
92 write(STDOUT_FILENO,toprint ? " " : "\n",1);