1/* sinfo.c
2   Get information about a system.
3
4   Copyright (C) 1992 Ian Lance Taylor
5
6   This file is part of the Taylor UUCP uuconf library.
7
8   This library is free software; you can redistribute it and/or
9   modify it under the terms of the GNU Library General Public License
10   as published by the Free Software Foundation; either version 2 of
11   the License, or (at your option) any later version.
12
13   This library is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16   Library General Public License for more details.
17
18   You should have received a copy of the GNU Library General Public
19   License along with this library; if not, write to the Free Software
20   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
21
22   The author of the program may be contacted at ian@airs.com.
23   */
24
25#include "uucnfi.h"
26
27#if USE_RCS_ID
28const char _uuconf_sinfo_rcsid[] = "$Id: sinfo.c,v 1.6 2002/03/05 19:10:42 ian Rel $";
29#endif
30
31/* Get information about a particular system.  We combine the
32   definitions for this system from each type of configuration file,
33   by passing what we have so far into each one.  */
34
35int
36uuconf_system_info (pglobal, zsystem, qsys)
37     pointer pglobal;
38     const char *zsystem;
39     struct uuconf_system *qsys;
40{
41  struct sglobal *qglobal = (struct sglobal *) pglobal;
42  int iret;
43  boolean fgot;
44
45  fgot = FALSE;
46
47#if HAVE_TAYLOR_CONFIG
48  iret = _uuconf_itaylor_system_internal (qglobal, zsystem, qsys);
49  if (iret == UUCONF_SUCCESS)
50    fgot = TRUE;
51  else if (iret != UUCONF_NOT_FOUND)
52    return iret;
53#endif
54
55#if HAVE_V2_CONFIG
56  if (qglobal->qprocess->fv2)
57    {
58      struct uuconf_system *q;
59      struct uuconf_system sv2;
60
61      if (fgot)
62	q = &sv2;
63      else
64	q = qsys;
65      iret = _uuconf_iv2_system_internal (qglobal, zsystem, q);
66      if (iret == UUCONF_SUCCESS)
67	{
68	  if (fgot)
69	    {
70	      iret = _uuconf_isystem_default (qglobal, qsys, &sv2, TRUE);
71	      if (iret != UUCONF_SUCCESS)
72		return iret;
73	    }
74	  fgot = TRUE;
75	}
76      else if (iret != UUCONF_NOT_FOUND)
77	return iret;
78    }
79#endif
80
81#if HAVE_HDB_CONFIG
82  if (qglobal->qprocess->fhdb)
83    {
84      struct uuconf_system *q;
85      struct uuconf_system shdb;
86
87      if (fgot)
88	q = &shdb;
89      else
90	q = qsys;
91      iret = _uuconf_ihdb_system_internal (qglobal, zsystem, q);
92      if (iret == UUCONF_SUCCESS)
93	{
94	  if (fgot)
95	    {
96	      iret = _uuconf_isystem_default (qglobal, qsys, &shdb, TRUE);
97	      if (iret != UUCONF_SUCCESS)
98		return iret;
99	    }
100	  fgot = TRUE;
101	}
102      else if (iret != UUCONF_NOT_FOUND)
103	return iret;
104    }
105#endif
106
107  if (! fgot)
108    return UUCONF_NOT_FOUND;
109
110  return _uuconf_isystem_basic_default (qglobal, qsys);
111}
112