Research V7 development
[unix-history] / usr / src / cmd / struct / 0.string.c
CommitLineData
2a70a0a1
BB
1#include <stdio.h>
2#include "def.h"
3#include "1.defs.h"
4
5str_copy(s,ptr,length) /* copy s at ptr, return length of s */
6char *s, *ptr;
7int length;
8 {int i;
9 for (i = 0; i < length; i++)
10 {
11 ptr[i] = s[i];
12 if (ptr[i] == '\0')
13 return(i + 1);
14 }
15 faterr("string too long to be copied at given address:\n",s,"");
16 }
17
18
19find(s,ar,size)
20char *s,*ar[];
21int size;
22 {
23 int i;
24 for (i=0; i < size; i++)
25 {if (str_eq(s, ar[i])) return(i);}
26 return(-1);
27 }
28
29
30str_eq(s,t)
31char s[],t[];
32 {int j;
33 for (j = 0; s[j] == t[j]; j++)
34 {if (s[j] == '\0') return(1);}
35 return(0);
36 }
37
38
39classmatch(c,i)
40char c;
41int i;
42 {switch(i)
43 {case _digit:
44 if ('0' <= c && c <= '9') return(1);
45 else return(0);
46
47 case _letter:
48 if ( ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'))
49 return(1);
50 else return(0);
51
52 case _diglet: return(classmatch(c,_digit)||classmatch(c,_letter) );
53
54 case _arith:
55 if (050 <= c && c<= 057) return(1);
56 else return(0);
57 case _nl:
58 return(c=='\n');
59 case _other:
60 return(1);
61 }
62 }
63
64
65copychars(cbeg,target,n) /* copy n chars from cbeg to target */
66char *cbeg, *target;
67int n;
68 {
69 int i;
70 for (i = 0; i < n; i++)
71 target[i] = cbeg[i];
72 }
73
74
75
76copycs(cbeg,target,n) /* copy n chars from cbeg to target, add '\0' */
77char *cbeg, *target;
78int n;
79 {
80 copychars(cbeg,target,n);
81 target[n] = '\0';
82 }
83
84
85slength(s) /* return number of chars in s, not counting '\0' */
86char *s;
87 {
88 int i;
89 if (!s) return(-1);
90 for (i = 0; s[i] != '\0'; i++);
91 return(i);
92 }
93
94
95concat(x,y) /* allocate space, return xy */
96char *x, *y;
97 {
98 char *temp;
99 int i,j;
100 i = slength(x);
101 j = slength(y);
102 temp = galloc(i + j + 1);
103 sprintf(temp,"%s",x);
104 sprintf(&temp[i],"%s",y);
105 return(temp);
106 }