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