1370b324cSopenharmony_ci// Common/StdInStream.cpp
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#include "StdAfx.h"
4370b324cSopenharmony_ci
5370b324cSopenharmony_ci#ifdef _WIN32
6370b324cSopenharmony_ci#include <tchar.h>
7370b324cSopenharmony_ci#endif
8370b324cSopenharmony_ci
9370b324cSopenharmony_ci#include "StdInStream.h"
10370b324cSopenharmony_ci#include "StringConvert.h"
11370b324cSopenharmony_ci#include "UTFConvert.h"
12370b324cSopenharmony_ci
13370b324cSopenharmony_ci// #define kEOFMessage "Unexpected end of input stream"
14370b324cSopenharmony_ci// #define kReadErrorMessage "Error reading input stream"
15370b324cSopenharmony_ci// #define kIllegalCharMessage "Illegal zero character in input stream"
16370b324cSopenharmony_ci
17370b324cSopenharmony_ci
18370b324cSopenharmony_ciCStdInStream g_StdIn(stdin);
19370b324cSopenharmony_ci
20370b324cSopenharmony_ci/*
21370b324cSopenharmony_ci#define kFileOpenMode TEXT("r")
22370b324cSopenharmony_ci
23370b324cSopenharmony_cibool CStdInStream::Open(LPCTSTR fileName) throw()
24370b324cSopenharmony_ci{
25370b324cSopenharmony_ci  Close();
26370b324cSopenharmony_ci  _stream =
27370b324cSopenharmony_ci    #ifdef _WIN32
28370b324cSopenharmony_ci      _tfopen
29370b324cSopenharmony_ci    #else
30370b324cSopenharmony_ci      fopen
31370b324cSopenharmony_ci    #endif
32370b324cSopenharmony_ci      (fileName, kFileOpenMode);
33370b324cSopenharmony_ci  _streamIsOpen = (_stream != 0);
34370b324cSopenharmony_ci  return _streamIsOpen;
35370b324cSopenharmony_ci}
36370b324cSopenharmony_ci
37370b324cSopenharmony_cibool CStdInStream::Close() throw()
38370b324cSopenharmony_ci{
39370b324cSopenharmony_ci  if (!_streamIsOpen)
40370b324cSopenharmony_ci    return true;
41370b324cSopenharmony_ci  _streamIsOpen = (fclose(_stream) != 0);
42370b324cSopenharmony_ci  return !_streamIsOpen;
43370b324cSopenharmony_ci}
44370b324cSopenharmony_ci*/
45370b324cSopenharmony_ci
46370b324cSopenharmony_cibool CStdInStream::ScanAStringUntilNewLine(AString &s)
47370b324cSopenharmony_ci{
48370b324cSopenharmony_ci  s.Empty();
49370b324cSopenharmony_ci  for (;;)
50370b324cSopenharmony_ci  {
51370b324cSopenharmony_ci    int intChar = GetChar();
52370b324cSopenharmony_ci    if (intChar == EOF)
53370b324cSopenharmony_ci      return true;
54370b324cSopenharmony_ci    char c = (char)intChar;
55370b324cSopenharmony_ci    if (c == 0)
56370b324cSopenharmony_ci      return false;
57370b324cSopenharmony_ci    if (c == '\n')
58370b324cSopenharmony_ci      return true;
59370b324cSopenharmony_ci    s += c;
60370b324cSopenharmony_ci  }
61370b324cSopenharmony_ci}
62370b324cSopenharmony_ci
63370b324cSopenharmony_cibool CStdInStream::ScanUStringUntilNewLine(UString &dest)
64370b324cSopenharmony_ci{
65370b324cSopenharmony_ci  dest.Empty();
66370b324cSopenharmony_ci  AString s;
67370b324cSopenharmony_ci  bool res = ScanAStringUntilNewLine(s);
68370b324cSopenharmony_ci  int codePage = CodePage;
69370b324cSopenharmony_ci  if (codePage == -1)
70370b324cSopenharmony_ci    codePage = CP_OEMCP;
71370b324cSopenharmony_ci  if (codePage == CP_UTF8)
72370b324cSopenharmony_ci    ConvertUTF8ToUnicode(s, dest);
73370b324cSopenharmony_ci  else
74370b324cSopenharmony_ci    MultiByteToUnicodeString2(dest, s, (UINT)codePage);
75370b324cSopenharmony_ci  return res;
76370b324cSopenharmony_ci}
77370b324cSopenharmony_ci
78370b324cSopenharmony_ci/*
79370b324cSopenharmony_cibool CStdInStream::ReadToString(AString &resultString)
80370b324cSopenharmony_ci{
81370b324cSopenharmony_ci  resultString.Empty();
82370b324cSopenharmony_ci  for (;;)
83370b324cSopenharmony_ci  {
84370b324cSopenharmony_ci    int intChar = GetChar();
85370b324cSopenharmony_ci    if (intChar == EOF)
86370b324cSopenharmony_ci      return !Error();
87370b324cSopenharmony_ci    char c = (char)intChar;
88370b324cSopenharmony_ci    if (c == 0)
89370b324cSopenharmony_ci      return false;
90370b324cSopenharmony_ci    resultString += c;
91370b324cSopenharmony_ci  }
92370b324cSopenharmony_ci}
93370b324cSopenharmony_ci*/
94370b324cSopenharmony_ci
95370b324cSopenharmony_ciint CStdInStream::GetChar()
96370b324cSopenharmony_ci{
97370b324cSopenharmony_ci  return fgetc(_stream); // getc() doesn't work in BeOS?
98370b324cSopenharmony_ci}
99