source: trunk/athena/bin/machtype/machtype.c @ 17380

Revision 17380, 3.7 KB checked in by ghudson, 22 years ago (diff)
Need <stdlib.h> for exit().
RevLine 
[12029]1/*
2 *  Machtype: determine machine type & display type
3 *
4 * RCS Info
[17380]5 *    $Id: machtype.c,v 1.4 2002-03-21 04:24:55 ghudson Exp $
[12029]6 */
7
8#include <stdio.h>
[17380]9#include <stdlib.h>
[12029]10#include <string.h>
[13614]11#include <unistd.h>
[12029]12#include "machtype.h"
13
14extern char *optarg;
15extern int optind;
16
17void usage(char *name);
18
19int main(int argc, char *argv[])
20{
21  int i;
22  int cpuflg = 0, dpyflg = 0, raflg = 0, memflg = 0;
23  int doathenaV = 0;
24  int dosyspV = 0;
25  int dolocalV = 0;
26  int dobosN = 0;
27  int dobosV = 0;
28  int dosysnam = 0;
29  int dosyscompatnam = 0;
30  int verbose = 0;
31  FILE *f;
32  char *progname, *cp;
33
34  progname = argv[0];
35  cp = strrchr(progname, '/');
36  if (cp != NULL)
37    progname = cp+1;
38
39  while ((i = getopt(argc, argv, "cdrMALPNESCv")) != EOF)
40    {
41      switch (i)
42        {
43        case 'c':
44          cpuflg = 1;
45          break;
46        case 'd':
47          dpyflg = 1;
48          break;
49        case 'r':
50          raflg = 1;
51          break;
52        case 'M':
53          memflg = 1;
54          break;
55        case 'A':
56          doathenaV = 1;
57          break;
58        case 'L':
59          dolocalV = 1;
60          break;
61        case 'P':
62          dosyspV = 1;
63          break;
64        case 'N':
65          dobosN = 1;
66          break;
67        case 'E':
68          dobosV = 1;
69          break;
70        case 'S':
71          dosysnam = 1;
72          break;
73        case 'C':
74          dosyscompatnam = 1;
75          break;
76        case 'v':
77          verbose++;
78          break;
79        default:
80          usage(progname);
81        }
82    }
83  if (argv[optind] != NULL)
84    usage(progname);
85
86  if (!(cpuflg || dpyflg || raflg || memflg || doathenaV || dolocalV ||
87        dosyspV || dobosN || dobosV || dosysnam || dosyscompatnam))
88    {
89      do_machtype();
90      exit(0);
91    }
92
93  /* Print out version of Athena machtype compiled against */
94  if (doathenaV)
95    {
96      if (verbose)
97        fputs("Machtype version: ", stdout);
98      printf("%s.%s\n", ATHMAJV, ATHMINV);
99    }
100
101    /* Print out version of attached packs */
102    if (dosyspV)
103      {
104        char buf[256], *rvd_version, *p;
105        if ((f = fopen("/srvd/.rvdinfo","r")) == NULL)
106            puts("Syspack information unavailable.");
107        else
108          {
109            fgets(buf, sizeof(buf), f);
110            fclose(f);
111            /* If it is verbose, give the whole line, else just the vers # */
112            if (verbose)
113                fputs(buf, stdout);
114            else
115              {
116                p = strchr(buf,' '); /* skip "Athena" */
117                p = strchr(p+1,' '); /* skip "RVD" */
118                p = strchr(p+1,' '); /* Skip machtype */
119                p = strchr(p+1,' '); /* skip "version" */
120                rvd_version = p+1;
121                p = strchr(rvd_version,' ');
122                *p = '\0';
123                puts(rvd_version);
124              }
125          }
126      }
127
128  /* Print out local version from /etc/athena/version */
129  if (dolocalV)
130    {
131      char buf[256], *loc_version, *p;
132      if ((f = fopen("/etc/athena/version","r")) == NULL)
133          puts("Local version information unavailable.");
134      else
135        {
136          while (fgets(buf, sizeof(buf), f) != NULL)
137            ;
138          fclose(f);
139          if (verbose)
140              fputs(buf, stdout);
141          else
142            {
143              p = strchr(buf,' '); /* skip "Athena" */
144              p = strchr(p+1,' '); /* skip "Workstation/Server" */
145              p = strchr(p+1,' '); /* Skip machtype */
146              p = strchr(p+1,' '); /* skip "version" */
147              loc_version = p+1;
148              p = strchr(loc_version,' ');
149              *p = '\0';
150              puts(loc_version);
151            }
152        }
153    }
154
155  /* Print out vendor OS name */
156  if (dobosN)
[13614]157    {
158      if (verbose)
159        puts(OSNAME " " OSVERS);
160      else
161        puts(OSNAME);
162    }
[12029]163
164  /* Print out vendor OS version */
165  if (dobosV)
166    puts(OSVERS);
167
168  /* Print out Athena System name */
169  if (dosysnam)
170    puts(ATHSYS);
171
172  /* Print out compatible Athena System names */
173  if (dosyscompatnam)
174    puts(ATHSYSCOMPAT);
175
176  if (cpuflg)
177    do_cpu(verbose);
178  if (dpyflg)
179    do_dpy(verbose);
180  if (raflg)
181    do_disk(verbose);
182  if (memflg)
183    do_memory(verbose);
184  exit(0);
185}
186
187void usage(char *name)
188{
189  fprintf(stderr, "usage: %s [-v] [-c] [-d] [-r] [-E] [-N] [-M]\n", name);
190  fprintf(stderr, "             [-A] [-L] [-P] [-S] [-C]\n");
191  exit(1);
192}
Note: See TracBrowser for help on using the repository browser.