* Fixed issue introduced in hrev38139: restoring from the line drawing table was hard-coded to UTF8 Ground table. That is wrong: the table for currently configured encoding must be set back. Please look on using of _GuessGroundTable() for details; * Fixed issue introduced in hrev34894: the semantic of convert_xx_utf8 functions requires the destination length to be set equal to the target buffer size. Pre-hrev34894 usage of "homebrew" conversion functions was a bit different - destination length was set to 0. This made any converstions of input data useless and produce no visual results; * Private list of supported encodings (Encoding.cpp) was replaced by using BPrivate::BCharacterSetRoster functionality. That allows to use centralized info about encodings in unified with other applications (Mail & StyledEdit for example) way. Most of currently enumerated in UTF8.h encodings now available in Terminal. Note that UCS-2 and UTF-16 are temporary (???) excluded from the list of encodings supported by Terminal. * The B_UTF16_CONVERSION was added in system-wide UTF8.h declarations. This character set is available for enumerating by BCharacterSetRoster but not listed in public API. Looks like it was just missed; * Special note about "Text Encoding" entry in Preference File: So known "shortname" of encoding was used in the preferences file. For details look on the encodings list in previous version of Encoding.cpp. As result of migrating to BCharacterSet-provided resources this list was deleted and is not available anymore. Instead of it the IANA name of the character encoding targeted to be used for this purposes. Frankly speaking this part looks like not working at the moment. The value of text encoding is hardcoded to "UTF-8" now and is not affected by any operations in Terminal menu. Note that "shortname" for default encoding was "UTF8" but the saved value is "UTF-8" - and they are looking not dependent at all. So this change should not introduce any kind of backward incompatibility.
110 lines
3.0 KiB
C++
110 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
|
|
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files or portions
|
|
* thereof (the "Software"), to deal in the Software without restriction,
|
|
* including without limitation the rights to use, copy, modify, merge,
|
|
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
* and to permit persons to whom the Software is furnished to do so, subject
|
|
* to the following conditions:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above copyright notice
|
|
* in the binary, as well as this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided with
|
|
* the distribution.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*
|
|
*/
|
|
#ifndef TERMPARSE_H
|
|
#define TERMPARSE_H
|
|
|
|
|
|
#include "TermConst.h"
|
|
|
|
#include <Handler.h>
|
|
#include <OS.h>
|
|
|
|
|
|
#define READ_BUF_SIZE 2048
|
|
// pty read buffer size
|
|
#define MIN_PTY_BUFFER_SPACE 16
|
|
// minimal space left before the reader tries to read more
|
|
#define ESC_PARSER_BUFFER_SIZE 64
|
|
// size of the parser buffer
|
|
|
|
|
|
class TerminalBuffer;
|
|
|
|
class TermParse : public BHandler {
|
|
public:
|
|
TermParse(int fd);
|
|
~TermParse();
|
|
|
|
status_t StartThreads(TerminalBuffer *view);
|
|
status_t StopThreads();
|
|
|
|
private:
|
|
inline uchar _NextParseChar();
|
|
|
|
// Initialize TermParse and PtyReader thread.
|
|
status_t _InitTermParse();
|
|
status_t _InitPtyReader();
|
|
|
|
void _StopTermParse();
|
|
void _StopPtyReader();
|
|
|
|
int32 EscParse();
|
|
int32 PtyReader();
|
|
|
|
void DumpState(int *groundtable, int *parsestate, uchar c);
|
|
|
|
static int32 _ptyreader_thread(void *);
|
|
static int32 _escparse_thread(void *);
|
|
|
|
status_t _ReadParserBuffer();
|
|
|
|
void _DeviceStatusReport(int n);
|
|
void _DecReqTermParms(int value);
|
|
void _DecPrivateModeSet(int value);
|
|
void _DecPrivateModeReset(int value);
|
|
void _DecSaveCursor();
|
|
void _DecRestoreCursor();
|
|
int* _GuessGroundTable(int encoding);
|
|
|
|
int fFd;
|
|
|
|
uint32 fAttr;
|
|
uint32 fSavedAttr;
|
|
|
|
thread_id fParseThread;
|
|
thread_id fReaderThread;
|
|
sem_id fReaderSem;
|
|
sem_id fReaderLocker;
|
|
|
|
uint fBufferPosition;
|
|
uchar fReadBuffer[READ_BUF_SIZE];
|
|
vint32 fReadBufferSize;
|
|
|
|
uchar fParserBuffer[ESC_PARSER_BUFFER_SIZE];
|
|
int32 fParserBufferSize;
|
|
int32 fParserBufferOffset;
|
|
|
|
TerminalBuffer *fBuffer;
|
|
|
|
bool fQuitting;
|
|
};
|
|
|
|
#endif // TERMPARSE_H
|