Add very old versions (for history).
[opsoft_archive.git] / silentbob / silentbob-1.4 / gclib / src / dpbuf.cxx
blobbfa6dd90b70b63c3a669765eeb505a3d5779e4b9
1 /*
2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
4 *
5 */
7 #include <gclib.h>
8 #include <dpbuf.h>
9 #include <gclib_c.h>
11 DPBuf::DPBuf ()
15 DPBuf::DPBuf (char *ptr, int len)
17 init (ptr, len);
20 DPBuf::~DPBuf ()
24 unsigned char DPBuf::r8 (char *ptr)
26 unsigned char *S;
27 if (! ptr)
28 S = (unsigned char *) carret;
29 else
30 S = (unsigned char *) ptr;
32 if (check ((char *) S, 1))
33 return *S;
35 return 0;
38 uint16_t DPBuf::r16 (char *ptr)
40 uint16_t *S;
41 if (! ptr)
42 S = (uint16_t *) carret;
43 else
44 S = (uint16_t *) ptr;
46 if (check ((char *) S, 2))
47 return *S;
48 return 0;
51 uint32_t DPBuf::r32 (char *ptr)
53 uint32_t *S;
54 if (! ptr)
55 S = (uint32_t *) carret;
56 else
57 S = (uint32_t *) ptr;
59 if (check ((char *) S, 4))
60 return *S;
61 return 0;
64 char * DPBuf::rd (char *ptr, int len)
66 char *S;
67 if (! ptr)
68 S = carret;
69 else
70 S = ptr;
72 if (check ((char *)S, len))
73 return S;
75 return 0;
78 char * DPBuf::set_pos (char * ptr)
80 if (check (ptr, 1)) {
81 carret = ptr;
82 return ptr;
83 } else
84 return carret;
87 void DPBuf::init (char *ptr, int len)
89 begin = ptr;
90 end = begin+len;
91 ok = true;
94 void DPBuf::s8 (void)
96 check (carret, 1);
97 ++carret;
100 void DPBuf::s16 (void)
102 check (carret, 2);
103 carret += 2;
106 void DPBuf::s32 (void)
108 check (carret, 4);
109 carret += 4;
112 void DPBuf::sd (int len)
114 check (carret, len);
115 carret += len;
118 bool DPBuf::check (char *ptr, int count)
120 if (((ptr + count) > end) || ptr < begin) {
121 ok = false;
122 return false;
124 return true;
127 char * DPBuf::strcat (char *ptr, char *S)
129 int len;
130 if (! S) {
131 ok = false;
132 return NULL;
135 if (! ptr)
136 ptr = carret;
138 if (! check (ptr, 1))
139 return NULL;
141 len = strlen (S);
142 if (! check (ptr, len+1)) {
143 ok = false;
144 return NULL;
147 memcpy (ptr, S, len);
148 ptr[len] = '\0';
149 return &ptr[len];
152 char * DPBuf::memmem (char * buf, char * needle, size_t needlelen)
154 int count;
155 char * ptr;
157 ptr = buf ? buf : carret;
158 if (! check (ptr, 1))
159 return NULL;
161 count = end-ptr;
162 ptr = (char *) Dmemmem (ptr, count, needle, needlelen);
163 if (! ptr)
164 ok = false;
166 return ptr;
169 char * DPBuf::ch (char *buf, char ch)
171 if (! buf)
172 buf = carret;
174 if (! check (buf, 1))
175 return NULL;
177 while (buf != end && *buf != ch)
178 ++buf;
180 if (buf == end) {
181 ok = false;
182 return NULL;
183 } else
184 return buf;