1/*
2 * tc.vers.c: Version dependent stuff
3 */
4/*-
5 * Copyright (c) 1980, 1991 The Regents of the University of California.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the University nor the names of its contributors
17 *    may be used to endorse or promote products derived from this software
18 *    without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32#include "sh.h"
33#include "tw.h"
34#include "patchlevel.h"
35
36
37/* fix_version():
38 *	Print a reasonable version string, printing all compile time
39 *	options that might affect the user.
40 */
41void
42fix_version(void)
43{
44#ifdef WIDE_STRINGS
45# define SSSTR "wide"
46#elif defined (SHORT_STRINGS)
47# define SSSTR "8b"
48#else
49# define SSSTR "7b"
50#endif
51#ifdef NLS
52# define NLSSTR ",nls"
53#else
54# define NLSSTR ""
55#endif
56#ifdef LOGINFIRST
57# define LFSTR ",lf"
58#else
59# define LFSTR ""
60#endif
61#ifdef DOTLAST
62# define DLSTR ",dl"
63#else
64# define DLSTR ""
65#endif
66#ifdef VIDEFAULT
67# define VISTR ",vi"
68#else
69# define VISTR ""
70#endif
71#ifdef TESLA
72# define DTRSTR ",dtr"
73#else
74# define DTRSTR ""
75#endif
76#ifdef KAI
77# define BYESTR ",bye"
78#else
79# define BYESTR ""
80#endif
81#ifdef AUTOLOGOUT
82# define ALSTR ",al"
83#else
84# define ALSTR ""
85#endif
86#ifdef KANJI
87# define KANSTR ",kan"
88#else
89# define KANSTR ""
90#endif
91#ifdef SYSMALLOC
92# define SMSTR	",sm"
93#else
94# define SMSTR  ""
95#endif
96#ifdef HASHBANG
97# define HBSTR	",hb"
98#else
99# define HBSTR  ""
100#endif
101#ifdef NEWGRP
102# define NGSTR	",ng"
103#else
104# define NGSTR	""
105#endif
106#ifdef REMOTEHOST
107# define RHSTR	",rh"
108#else
109# define RHSTR	""
110#endif
111#ifdef AFS
112# define AFSSTR	",afs"
113#else
114# define AFSSTR	""
115#endif
116#ifdef NODOT
117# define NDSTR	",nd"
118#else
119# define NDSTR	""
120#endif
121#ifdef COLOR_LS_F
122# define COLORSTR ",color"
123#else /* ifndef COLOR_LS_F */
124# define COLORSTR ""
125#endif /* COLOR_LS_F */
126#ifdef DSPMBYTE
127# define DSPMSTR ",dspm"
128#else
129# define DSPMSTR ""
130#endif
131#ifdef COLORCAT
132# define CCATSTR ",ccat"
133#else
134# define CCATSTR ""
135#endif
136#if defined(FILEC) && defined(TIOCSTI)
137# define FILECSTR ",filec"
138#else
139# define FILECSTR ""
140#endif
141/* if you want your local version to say something */
142#ifndef LOCALSTR
143# define LOCALSTR ""
144#endif /* LOCALSTR */
145    char    *version;
146    const Char *machtype = tgetenv(STRMACHTYPE);
147    const Char *vendor   = tgetenv(STRVENDOR);
148    const Char *ostype   = tgetenv(STROSTYPE);
149
150    if (vendor == NULL)
151	vendor = STRunknown;
152    if (machtype == NULL)
153	machtype = STRunknown;
154    if (ostype == NULL)
155	ostype = STRunknown;
156
157
158    version = xasprintf(
159"tcsh %d.%.2d.%.2d (%s) %s (%S-%S-%S) options %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
160	     REV, VERS, PATCHLEVEL, ORIGIN, DATE, machtype, vendor, ostype,
161	     SSSTR, NLSSTR, LFSTR, DLSTR, VISTR, DTRSTR, BYESTR,
162	     ALSTR, KANSTR, SMSTR, HBSTR, NGSTR, RHSTR, AFSSTR, NDSTR,
163	     COLORSTR, DSPMSTR, CCATSTR, FILECSTR, LOCALSTR);
164    cleanup_push(version, xfree);
165    setcopy(STRversion, str2short(version), VAR_READWRITE);
166    cleanup_until(version);
167    version = xasprintf("%d.%.2d.%.2d", REV, VERS, PATCHLEVEL);
168    cleanup_push(version, xfree);
169    setcopy(STRtcsh, str2short(version), VAR_READWRITE);
170    cleanup_until(version);
171}
172