Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/checkeol.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8903 - (hide annotations) (download) (as text)
Tue Aug 18 15:31:01 2020 UTC (3 years, 7 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/checkeol.cpp
File MIME type: text/x-c++src
File size: 1768 byte(s)
行末を検出するcheckeolを追加
1 zmatsuo 8903
2     #include <stdlib.h>
3     #include <windows.h>
4    
5     #include "checkeol.h"
6    
7     // tttypes.h
8     #define CR 0x0D
9     #define LF 0x0A
10    
11     struct CheckEOLData_st {
12     BOOL cr_hold;
13     };
14    
15     CheckEOLData_t *CheckEOLCreate(void)
16     {
17     CheckEOLData_t *self = (CheckEOLData_t *)calloc(sizeof(CheckEOLData_t), 1);
18     return self;
19     }
20    
21     void CheckEOLDestroy(CheckEOLData_t *self)
22     {
23     free(self);
24     }
25    
26     void CheckEOLClear(CheckEOLData_t *self)
27     {
28     self->cr_hold = FALSE;
29     }
30    
31     /**
32     * 次にEOL(改行), u32 を出力するか調べる
33     *
34     * 戻り値は CheckEOLRet の OR で返る
35     *
36     * @retval CheckEOLNoOutput 何も出力しない
37     * @retval CheckEOLOutputEOL 改行コードを出力する
38     * @retval CheckEOLOutputChar u32をそのまま出力する
39     */
40     CheckEOLRet CheckEOLCheck(CheckEOLData_t *self, unsigned int u32)
41     {
42     // 入力が改行(CR or LF)の場合、
43     // 改行の種類(CR or LF or CR+LF)を自動で判定して
44     // OutputLogNewLine() で改行を出力する
45     // 入力 CR hold 改行出力 CR hold 変更
46     // +-------+-----------+-----------+------------
47     // CR なし しない セットする
48     // LF なし する 変化なし
49     // その他 なし しない 変化なし
50     // CR あり する 変化なし(ホールドしたまま)
51     // LF あり する クリアする
52     // その他 あり する クリアする
53     if (self->cr_hold == FALSE) {
54     if (u32 == CR) {
55     self->cr_hold = TRUE;
56     return CheckEOLNoOutput;
57     }
58     else if (u32 == LF) {
59     return CheckEOLOutputEOL;
60     }
61     else {
62     return CheckEOLOutputChar;
63     }
64     }
65     else {
66     if (u32 == CR) {
67     return CheckEOLOutputEOL;
68     }
69     else if (u32 == LF) {
70     self->cr_hold = FALSE;
71     return CheckEOLOutputEOL;
72     }
73     else {
74     self->cr_hold = FALSE;
75     return (CheckEOLRet)(CheckEOLOutputEOL | CheckEOLOutputChar);
76     }
77     }
78     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26