1 // -*- coding:unix; mode:c++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
5 //------------------------------------------------
6 StringBIStream::StringBIStream(UKBYTE *data, int len, int elementSize)
8 m_data = m_current = data;
12 m_eos = (*(UKWORD *)data == 0);
13 else if (elementSize == 4)
14 m_eos = (*(UKDWORD *)data == 4);
23 //------------------------------------------------
24 int StringBIStream::eos()
29 //------------------------------------------------
30 int StringBIStream::getNext(UKBYTE & b)
40 m_eos = (m_left <= 0);
45 //------------------------------------------------
46 int StringBIStream::unget(UKBYTE b)
48 if (m_current != m_data) {
57 //------------------------------------------------
58 int StringBIStream::getNextW(UKWORD & w)
61 w = *((UKWORD *)m_current);
67 m_eos = (m_left <= 0);
72 //------------------------------------------------
73 int StringBIStream::getNextDW(UKDWORD & dw)
77 dw = *((UKDWORD *)m_current);
83 m_eos = (m_left <= 0);
88 //------------------------------------------------
89 int StringBIStream::peekNext(UKBYTE & b)
97 //------------------------------------------------
98 int StringBIStream::peekNextW(UKWORD & w)
102 w = *((UKWORD *)m_current);
107 //------------------------------------------------
108 int StringBIStream::peekNextDW(UKDWORD & dw)
112 dw = *((UKDWORD *)m_current);
117 //------------------------------------------------
118 void StringBIStream::reopen()
123 m_eos = (m_data == 0);
125 m_eos = (m_len <= 0);
129 //------------------------------------------------
130 int StringBIStream::bookmark()
133 m_bookmark.current = m_current;
134 m_bookmark.data = m_data;
135 m_bookmark.eos = m_eos;
136 m_bookmark.left = m_left;
137 m_bookmark.len = m_len;
141 //------------------------------------------------
142 int StringBIStream::gotoBookmark()
146 m_current = m_bookmark.current;
147 m_data = m_bookmark.data;
148 m_eos = m_bookmark.eos;
149 m_left = m_bookmark.left;
150 m_len = m_bookmark.len;
154 //------------------------------------------------
155 int StringBIStream::close()
160 //////////////////////////////////////////////////
161 // Class StringBOStream
162 //////////////////////////////////////////////////
164 //------------------------------------------------
165 StringBOStream::StringBOStream(UKBYTE *buf, int len)
167 m_current = m_buf = buf;
173 //------------------------------------------------
174 int StringBOStream::putB(UKBYTE b)
178 if (m_out >= 2147483647) {
191 if (m_out <= m_len) {
199 //------------------------------------------------
200 int StringBOStream::putW(UKWORD w)
205 if (m_out <= m_len) {
206 *((UKWORD *)m_current) = w;
214 //------------------------------------------------
215 int StringBOStream::puts(const char *s, int size)
224 if (!m_bad && m_out > m_len)
230 if (!m_bad && m_out <= m_len) {
234 memcpy(m_current, s, n);
239 if (!m_bad && m_out > m_len)
244 //------------------------------------------------
245 void StringBOStream::reopen()
253 //------------------------------------------------
254 int StringBOStream::isOK()
260 ////////////////////////////////////////////////////
261 // Class FileBIStream //
262 ////////////////////////////////////////////////////
264 //----------------------------------------------------
265 FileBIStream::FileBIStream(int bufSize, char *buf)
277 //----------------------------------------------------
278 FileBIStream::~FileBIStream()
284 //----------------------------------------------------
285 int FileBIStream::open(const char *fileName)
287 m_file = fopen(fileName, "rb");
290 setvbuf(m_file, m_buf, _IOFBF, m_bufSize);
297 //----------------------------------------------------
298 int FileBIStream::close()
300 if (m_file != NULL) {
307 //----------------------------------------------------
308 void FileBIStream::attach(FILE * f)
316 //----------------------------------------------------
317 int FileBIStream::eos()
324 //----------------------------------------------------
325 int FileBIStream::getNext(UKBYTE &b)
336 return (!feof(m_file));
339 //----------------------------------------------------
340 int FileBIStream::peekNext(UKBYTE &b)
354 //----------------------------------------------------
355 int FileBIStream::unget(UKBYTE b)
368 //----------------------------------------------------
369 int FileBIStream::getNextW(UKWORD &w)
375 *((UKBYTE *)&w) = b1;
376 *(((UKBYTE *)&w)+1) = b2;
383 //----------------------------------------------------
384 int FileBIStream::getNextDW(UKDWORD &dw)
389 *((UKWORD *)&dw) = w1;
390 *(((UKWORD *)&dw)+1) = w2;
397 //----------------------------------------------------
398 int FileBIStream::peekNextW(UKWORD &w)
420 //----------------------------------------------------
421 int FileBIStream::bookmark()
424 m_bookmark.pos = ftell(m_file);
429 //----------------------------------------------------
430 int FileBIStream::gotoBookmark()
434 fseek(m_file, m_bookmark.pos, SEEK_SET);
438 ////////////////////////////////////////////////////
439 // Class FileBOStream //
440 ////////////////////////////////////////////////////
441 //----------------------------------------------------
442 FileBOStream::FileBOStream(int bufSize, char *buf)
451 //----------------------------------------------------
452 FileBOStream::~FileBOStream()
458 //----------------------------------------------------
459 int FileBOStream::open(const char *fileName)
461 m_file = fopen(fileName, "wb");
465 setvbuf(m_file, m_buf, _IOFBF, m_bufSize);
470 //----------------------------------------------------
471 void FileBOStream::attach(FILE * f)
478 //----------------------------------------------------
479 int FileBOStream::close()
481 if (m_file != NULL) {
488 //----------------------------------------------------
489 int FileBOStream::putB(UKBYTE b)
493 m_bad = (fputc(b, m_file) == EOF);
497 //----------------------------------------------------
498 int FileBOStream::putW(UKWORD w)
502 // m_bad = (fputwc(w, m_file) == WEOF);
503 m_bad = (fputc((UKBYTE)w, m_file) == EOF);
506 m_bad = (fputc((UKBYTE)(w >> 8), m_file) == EOF);
510 //----------------------------------------------------
511 int FileBOStream::puts(const char *s, int size)
516 m_bad = (fputs(s, m_file) == EOF);
519 int out = fwrite(s, 1, size, m_file);
520 m_bad = (out != size);
524 //----------------------------------------------------
525 int FileBOStream::isOK()