]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - games/trek/utility.c
This commit was generated by cvs2svn to compensate for changes in r102729,
[FreeBSD/FreeBSD.git] / games / trek / utility.c
1 /*
2  * Copyright (c) 1980, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by the University of
16  *      California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 #ifndef lint
35 #if 0
36 static char sccsid[] = "@(#)utility.c   8.1 (Berkeley) 5/31/93";
37 #endif
38 static const char rcsid[] =
39  "$FreeBSD$";
40 #endif /* not lint */
41
42 /*
43 **  ASSORTED UTILITY ROUTINES
44 */
45 #include <stdio.h>
46 #include <varargs.h>
47
48 /*
49 **  BLOCK MOVE
50 **
51 **      Moves a block of storage of length `l' bytes from the data
52 **      area pointed to by `a' to the area pointed to by `b'.
53 **      Returns the address of the byte following the `b' field.
54 **      Overflow of `b' is not tested.
55 */
56
57 char *bmove(a, b, l)
58 char    *a, *b;
59 int     l;
60 {
61         int             n;
62         char            *p, *q;
63
64         p = a;
65         q = b;
66         n = l;
67         while (n--)
68                 *q++ = *p++;
69         return (q);
70 }
71
72
73 /*
74 **  STRING EQUALITY TEST
75 **      null-terminated strings `a' and `b' are tested for
76 **      absolute equality.
77 **      returns one if equal, zero otherwise.
78 */
79
80 sequal(a, b)
81 char    *a, *b;
82 {
83         char            *p, *q;
84
85         p = a;
86         q = b;
87         while (*p || *q)
88                 if (*p++ != *q++)
89                         return(0);
90         return(1);
91 }
92
93
94 /*
95 **  STRING CONCATENATE
96 **
97 **      The strings `s1' and `s2' are concatenated and stored into
98 **      `s3'.  It is ok for `s1' to equal `s3', but terrible things
99 **      will happen if `s2' equals `s3'.  The return value is is a
100 **      pointer to the end of `s3' field.
101 */
102
103 char *concat(s1, s2, s3)
104 char    *s1, *s2, *s3;
105 {
106         char            *p;
107         char            *q;
108
109         p = s3;
110         q = s1;
111         while (*q)
112                 *p++ = *q++;
113         q = s2;
114         while (*q)
115                 *p++ = *q++;
116         *p = 0;
117         return (p);
118 }
119
120
121 /*
122 **  FIND STRING LENGTH
123 **
124 **      The length of string `s' (excluding the null byte which
125 **              terminates the string) is returned.
126 */
127
128 length(s)
129 char    *s;
130 {
131         int     l;
132         char    *p;
133
134         l = 0;
135         p = s;
136         while (*p++)
137                 l++;
138         return(l);
139 }
140
141
142 /*
143 **  SYSTEM ERROR
144 */
145
146 syserr(fmt, va_alist)
147 const char *fmt;
148 va_dcl
149 {
150         va_list         ap;
151         extern int      errno;
152
153         va_start(ap);
154         printf("\n\07TREK SYSERR: ");
155         vfprintf(stdout, fmt, ap);
156         printf("\n");
157         if (errno)
158                 printf("\tsystem error %d\n", errno);
159         va_end(ap);
160         exit(1);
161 }