Commit | Line | Data |
---|---|---|
bb0cfa24 DF |
1 | /* |
2 | * Copyright (c) 1980 Regents of the University of California. | |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
5 | */ | |
6 | ||
713e2710 | 7 | #ifndef lint |
bb0cfa24 | 8 | static char sccsid[] = "@(#)utility.c 5.1 (Berkeley) %G%"; |
713e2710 KM |
9 | #endif not lint |
10 | ||
11 | /* | |
12 | ** ASSORTED UTILITY ROUTINES | |
13 | */ | |
14 | ||
15 | /* | |
16 | ** BLOCK MOVE | |
17 | ** | |
18 | ** Moves a block of storage of length `l' bytes from the data | |
19 | ** area pointed to by `a' to the area pointed to by `b'. | |
20 | ** Returns the address of the byte following the `b' field. | |
21 | ** Overflow of `b' is not tested. | |
22 | */ | |
23 | ||
24 | char *bmove(a, b, l) | |
25 | char *a, *b; | |
26 | int l; | |
27 | { | |
28 | register int n; | |
29 | register char *p, *q; | |
30 | ||
31 | p = a; | |
32 | q = b; | |
33 | n = l; | |
34 | while (n--) | |
35 | *q++ = *p++; | |
36 | return (q); | |
37 | } | |
38 | ||
39 | ||
40 | /* | |
41 | ** STRING EQUALITY TEST | |
42 | ** null-terminated strings `a' and `b' are tested for | |
43 | ** absolute equality. | |
44 | ** returns one if equal, zero otherwise. | |
45 | */ | |
46 | ||
47 | sequal(a, b) | |
48 | char *a, *b; | |
49 | { | |
50 | register char *p, *q; | |
51 | ||
52 | p = a; | |
53 | q = b; | |
54 | while (*p || *q) | |
55 | if (*p++ != *q++) | |
56 | return(0); | |
57 | return(1); | |
58 | } | |
59 | ||
60 | ||
61 | /* | |
62 | ** STRING CONCATENATE | |
63 | ** | |
64 | ** The strings `s1' and `s2' are concatenated and stored into | |
65 | ** `s3'. It is ok for `s1' to equal `s3', but terrible things | |
66 | ** will happen if `s2' equals `s3'. The return value is is a | |
67 | ** pointer to the end of `s3' field. | |
68 | */ | |
69 | ||
70 | char *concat(s1, s2, s3) | |
71 | char *s1, *s2, *s3; | |
72 | { | |
73 | register char *p; | |
74 | register char *q; | |
75 | ||
76 | p = s3; | |
77 | q = s1; | |
78 | while (*q) | |
79 | *p++ = *q++; | |
80 | q = s2; | |
81 | while (*q) | |
82 | *p++ = *q++; | |
83 | *p = 0; | |
84 | return (p); | |
85 | } | |
86 | ||
87 | ||
88 | /* | |
89 | ** FIND STRING LENGTH | |
90 | ** | |
91 | ** The length of string `s' (excluding the null byte which | |
92 | ** terminates the string) is returned. | |
93 | */ | |
94 | ||
95 | length(s) | |
96 | char *s; | |
97 | { | |
98 | register int l; | |
99 | register char *p; | |
100 | ||
101 | l = 0; | |
102 | p = s; | |
103 | while (*p++) | |
104 | l++; | |
105 | return(l); | |
106 | } | |
107 | ||
108 | ||
109 | /* | |
110 | ** SYSTEM ERROR | |
111 | */ | |
112 | ||
113 | syserr(p0, p1, p2, p3, p4, p5) | |
114 | { | |
115 | extern int errno; | |
116 | ||
117 | printf("\n\07TREK SYSERR: "); | |
118 | printf(p0, p1, p2, p3, p4, p5); | |
119 | printf("\n"); | |
120 | if (errno) | |
121 | printf("\tsystem error %d\n", errno); | |
122 | exit(-1); | |
123 | } |