xref: /original-bsd/games/trek/utility.c (revision f1324ba5)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #ifndef lint
19 static char sccsid[] = "@(#)utility.c	5.3 (Berkeley) 06/18/88";
20 #endif /* not lint */
21 
22 /*
23 **  ASSORTED UTILITY ROUTINES
24 */
25 
26 /*
27 **  BLOCK MOVE
28 **
29 **	Moves a block of storage of length `l' bytes from the data
30 **	area pointed to by `a' to the area pointed to by `b'.
31 **	Returns the address of the byte following the `b' field.
32 **	Overflow of `b' is not tested.
33 */
34 
35 char *bmove(a, b, l)
36 char	*a, *b;
37 int	l;
38 {
39 	register int		n;
40 	register char		*p, *q;
41 
42 	p = a;
43 	q = b;
44 	n = l;
45 	while (n--)
46 		*q++ = *p++;
47 	return (q);
48 }
49 
50 
51 /*
52 **  STRING EQUALITY TEST
53 **	null-terminated strings `a' and `b' are tested for
54 **	absolute equality.
55 **	returns one if equal, zero otherwise.
56 */
57 
58 sequal(a, b)
59 char	*a, *b;
60 {
61 	register char		*p, *q;
62 
63 	p = a;
64 	q = b;
65 	while (*p || *q)
66 		if (*p++ != *q++)
67 			return(0);
68 	return(1);
69 }
70 
71 
72 /*
73 **  STRING CONCATENATE
74 **
75 **	The strings `s1' and `s2' are concatenated and stored into
76 **	`s3'.  It is ok for `s1' to equal `s3', but terrible things
77 **	will happen if `s2' equals `s3'.  The return value is is a
78 **	pointer to the end of `s3' field.
79 */
80 
81 char *concat(s1, s2, s3)
82 char	*s1, *s2, *s3;
83 {
84 	register char		*p;
85 	register char		*q;
86 
87 	p = s3;
88 	q = s1;
89 	while (*q)
90 		*p++ = *q++;
91 	q = s2;
92 	while (*q)
93 		*p++ = *q++;
94 	*p = 0;
95 	return (p);
96 }
97 
98 
99 /*
100 **  FIND STRING LENGTH
101 **
102 **	The length of string `s' (excluding the null byte which
103 **		terminates the string) is returned.
104 */
105 
106 length(s)
107 char	*s;
108 {
109 	register int	l;
110 	register char	*p;
111 
112 	l = 0;
113 	p = s;
114 	while (*p++)
115 		l++;
116 	return(l);
117 }
118 
119 
120 /*
121 **  SYSTEM ERROR
122 */
123 
124 syserr(p0, p1, p2, p3, p4, p5)
125 {
126 	extern int	errno;
127 
128 	printf("\n\07TREK SYSERR: ");
129 	printf(p0, p1, p2, p3, p4, p5);
130 	printf("\n");
131 	if (errno)
132 		printf("\tsystem error %d\n", errno);
133 	exit(-1);
134 }
135