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