home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / trek / utility.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  3.5 KB  |  151 lines

  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, 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. static char sccsid[] = "@(#)utility.c    5.4 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. /*
  39. **  ASSORTED UTILITY ROUTINES
  40. */
  41.  
  42. /*
  43. **  BLOCK MOVE
  44. **
  45. **    Moves a block of storage of length `l' bytes from the data
  46. **    area pointed to by `a' to the area pointed to by `b'.
  47. **    Returns the address of the byte following the `b' field.
  48. **    Overflow of `b' is not tested.
  49. */
  50.  
  51. char *bmove(a, b, l)
  52. char    *a, *b;
  53. int    l;
  54. {
  55.     register int        n;
  56.     register char        *p, *q;
  57.  
  58.     p = a;
  59.     q = b;
  60.     n = l;
  61.     while (n--)
  62.         *q++ = *p++;
  63.     return (q);
  64. }
  65.  
  66.  
  67. /*
  68. **  STRING EQUALITY TEST
  69. **    null-terminated strings `a' and `b' are tested for
  70. **    absolute equality.
  71. **    returns one if equal, zero otherwise.
  72. */
  73.  
  74. sequal(a, b)
  75. char    *a, *b;
  76. {
  77.     register char        *p, *q;
  78.  
  79.     p = a;
  80.     q = b;
  81.     while (*p || *q)
  82.         if (*p++ != *q++)
  83.             return(0);
  84.     return(1);
  85. }
  86.  
  87.  
  88. /*
  89. **  STRING CONCATENATE
  90. **
  91. **    The strings `s1' and `s2' are concatenated and stored into
  92. **    `s3'.  It is ok for `s1' to equal `s3', but terrible things
  93. **    will happen if `s2' equals `s3'.  The return value is is a
  94. **    pointer to the end of `s3' field.
  95. */
  96.  
  97. char *concat(s1, s2, s3)
  98. char    *s1, *s2, *s3;
  99. {
  100.     register char        *p;
  101.     register char        *q;
  102.  
  103.     p = s3;
  104.     q = s1;
  105.     while (*q)
  106.         *p++ = *q++;
  107.     q = s2;
  108.     while (*q)
  109.         *p++ = *q++;
  110.     *p = 0;
  111.     return (p);
  112. }
  113.  
  114.  
  115. /*
  116. **  FIND STRING LENGTH
  117. **
  118. **    The length of string `s' (excluding the null byte which
  119. **        terminates the string) is returned.
  120. */
  121.  
  122. length(s)
  123. char    *s;
  124. {
  125.     register int    l;
  126.     register char    *p;
  127.  
  128.     l = 0;
  129.     p = s;
  130.     while (*p++)
  131.         l++;
  132.     return(l);
  133. }
  134.  
  135.  
  136. /*
  137. **  SYSTEM ERROR
  138. */
  139.  
  140. syserr(p0, p1, p2, p3, p4, p5)
  141. {
  142.     extern int    errno;
  143.  
  144.     printf("\n\07TREK SYSERR: ");
  145.     printf(p0, p1, p2, p3, p4, p5);
  146.     printf("\n");
  147.     if (errno)
  148.         printf("\tsystem error %d\n", errno);
  149.     exit(-1);
  150. }
  151.