Install sccs headers and copyright notices.
[unix-history] / usr / src / usr.bin / tn3270 / general / genbsubs.c
CommitLineData
535751f3 1/*
992de934 2 * Copyright (c) 1984-1987 by the Regents of the
535751f3
GM
3 * University of California and by Gregory Glenn Minshall.
4 *
5 * Permission to use, copy, modify, and distribute these
6 * programs and their documentation for any purpose and
7 * without fee is hereby granted, provided that this
8 * copyright and permission appear on all copies and
9 * supporting documentation, the name of the Regents of
10 * the University of California not be used in advertising
11 * or publicity pertaining to distribution of the programs
12 * without specific prior permission, and notice be given in
13 * supporting documentation that copying and distribution is
14 * by permission of the Regents of the University of California
15 * and by Gregory Glenn Minshall. Neither the Regents of the
16 * University of California nor Gregory Glenn Minshall make
17 * representations about the suitability of this software
18 * for any purpose. It is provided "as is" without
19 * express or implied warranty.
20 */
21
22#ifndef lint
992de934 23static char sccsid[] = "@(#)genbsubs.c 1.4 (Berkeley) %G%";
535751f3
GM
24#endif /* ndef lint */
25
26/* The output of bunequal is the offset of the byte which didn't match;
27 * if all the bytes match, then we return n.
28 * bunequal(s1, s2, n) */
29
30int
31bunequal(s1, s2, n)
32register char *s1, *s2;
33register n;
34{
35 register int i = 0;
36
37 while (i++ < n) {
38 if (*s1++ != *s2++) {
39 break;
40 }
41 }
42 return(i-1);
43}
44
45/* bskip(s1, n, b) : finds the first occurrence of any byte != 'b' in the 'n'
46 * bytes beginning at 's1'.
47 */
48
49int
50bskip(s1, n, b)
51register char *s1;
52register int n;
53register int b;
54{
55 register int i = 0;
56
57 while (i++ < n) {
58 if (*s1++ != b) {
59 break;
60 }
61 }
62 return(i-1);
63}
eb8f58d6
GM
64
65/*
a3e38099 66 * memNSchr(const void *s, int c, size_t n, int and)
eb8f58d6
GM
67 *
68 * Like memchr, but the comparison is '((*s)&and) == c',
69 * and we increment our way through s by "stride" ('s += stride').
70 *
71 * We optimize for the most used strides of +1 and -1.
72 */
73
74unsigned char *
75memNSchr(s, c, n, and, stride)
76char *s;
77int c;
78unsigned int n;
79int and;
80int stride;
81{
82 register unsigned char _c, *_s, _and;
83
84 _and = and;
85 _c = (c&_and);
86 _s = (unsigned char *)s;
87 switch (stride) {
88 case 1:
89 while (n--) {
90 if (((*_s)&_and) == _c) {
91 return _s;
92 }
93 _s++;
94 }
95 break;
96 case -1:
97 while (n--) {
98 if (((*_s)&_and) == _c) {
99 return _s;
100 }
101 _s--;
102 }
103 break;
104 default:
105 while (n--) {
106 if (((*_s)&_and) == _c) {
107 return _s;
108 }
109 _s += stride;
110 }
111 }
112 return 0;
113}