1 |
/* Tera Term |
/* Tera Term |
2 |
Copyright(C) 1994-1998 T. Teranishi |
Copyright(C) 1994-1998 T. Teranishi |
3 |
All rights reserved. */ |
All rights reserved. */ |
4 |
|
|
5 |
/* TTTEK.DLL, TEK escape sequences */ |
/* TTTEK.DLL, TEK escape sequences */ |
6 |
#include "teraterm.h" |
#include "teraterm.h" |
7 |
#include "tttypes.h" |
#include "tttypes.h" |
8 |
#include "tektypes.h" |
#include "tektypes.h" |
9 |
#include "ttcommon.h" |
#include "ttcommon.h" |
10 |
#include <math.h> |
#include <math.h> |
11 |
#include <string.h> |
#include <string.h> |
12 |
|
|
13 |
#include "tekesc.h" |
#include "tekesc.h" |
14 |
|
|
15 |
void Log1Byte(PComVar cv, BYTE b) |
void Log1Byte(PComVar cv, BYTE b) |
16 |
{ |
{ |
17 |
((PCHAR)(cv->LogBuf))[cv->LogPtr] = b; |
((PCHAR)(cv->LogBuf))[cv->LogPtr] = b; |
18 |
cv->LogPtr++; |
cv->LogPtr++; |
19 |
if (cv->LogPtr >= InBuffSize) |
if (cv->LogPtr >= InBuffSize) |
20 |
cv->LogPtr = cv->LogPtr - InBuffSize; |
cv->LogPtr = cv->LogPtr - InBuffSize; |
21 |
if (cv->LCount >= InBuffSize) |
if (cv->LCount >= InBuffSize) |
22 |
{ |
{ |
23 |
cv->LCount = InBuffSize; |
cv->LCount = InBuffSize; |
24 |
cv->LStart = cv->LogPtr; |
cv->LStart = cv->LogPtr; |
25 |
} |
} |
26 |
else cv->LCount++; |
else cv->LCount++; |
27 |
} |
} |
28 |
|
|
29 |
void ChangeTextSize(PTEKVar tk, PTTSet ts) |
void ChangeTextSize(PTEKVar tk, PTTSet ts) |
30 |
{ |
{ |
31 |
SelectObject(tk->MemDC,tk->TEKFont[tk->TextSize]); |
SelectObject(tk->MemDC,tk->TEKFont[tk->TextSize]); |
32 |
tk->FontWidth = tk->FW[tk->TextSize]; |
tk->FontWidth = tk->FW[tk->TextSize]; |
33 |
tk->FontHeight = tk->FH[tk->TextSize]; |
tk->FontHeight = tk->FH[tk->TextSize]; |
34 |
|
|
35 |
if (tk->Active) TEKChangeCaret(tk, ts); |
if (tk->Active) TEKChangeCaret(tk, ts); |
36 |
} |
} |
37 |
|
|
38 |
void BackSpace(PTEKVar tk, PComVar cv) |
void BackSpace(PTEKVar tk, PComVar cv) |
39 |
{ |
{ |
40 |
tk->CaretX = tk->CaretX - tk->FontWidth; |
tk->CaretX = tk->CaretX - tk->FontWidth; |
41 |
if (tk->CaretX < 0) tk->CaretX = 0; |
if (tk->CaretX < 0) tk->CaretX = 0; |
42 |
if (cv->HLogBuf != NULL) Log1Byte(cv,BS); |
if (cv->HLogBuf != NULL) Log1Byte(cv,BS); |
43 |
} |
} |
44 |
|
|
45 |
void LineFeed(PTEKVar tk, PComVar cv) |
void LineFeed(PTEKVar tk, PComVar cv) |
46 |
{ |
{ |
47 |
tk->CaretY = tk->CaretY + tk->FontHeight; |
tk->CaretY = tk->CaretY + tk->FontHeight; |
48 |
if (tk->CaretY > tk->ScreenHeight) |
if (tk->CaretY > tk->ScreenHeight) |
49 |
{ |
{ |
50 |
tk->CaretY = tk->FontHeight; |
tk->CaretY = tk->FontHeight; |
51 |
if ((tk->CaretOffset==0) || (tk->CaretX < tk->CaretOffset)) |
if ((tk->CaretOffset==0) || (tk->CaretX < tk->CaretOffset)) |
52 |
{ |
{ |
53 |
tk->CaretOffset = tk->ScreenWidth >> 1; |
tk->CaretOffset = tk->ScreenWidth >> 1; |
54 |
tk->CaretX = tk->CaretX + tk->CaretOffset; |
tk->CaretX = tk->CaretX + tk->CaretOffset; |
55 |
if (tk->CaretX >= tk->ScreenWidth) |
if (tk->CaretX >= tk->ScreenWidth) |
56 |
tk->CaretX = tk->CaretOffset; |
tk->CaretX = tk->CaretOffset; |
57 |
} |
} |
58 |
else { |
else { |
59 |
tk->CaretX = tk->CaretX - tk->CaretOffset; |
tk->CaretX = tk->CaretX - tk->CaretOffset; |
60 |
tk->CaretOffset = 0; |
tk->CaretOffset = 0; |
61 |
} |
} |
62 |
} |
} |
63 |
if (cv->HLogBuf != NULL) Log1Byte(cv,LF); |
if (cv->HLogBuf != NULL) Log1Byte(cv,LF); |
64 |
} |
} |
65 |
|
|
66 |
void CarriageReturn(PTEKVar tk, PComVar cv) |
void CarriageReturn(PTEKVar tk, PComVar cv) |
67 |
{ |
{ |
68 |
tk->CaretX = tk->CaretOffset; |
tk->CaretX = tk->CaretOffset; |
69 |
if (cv->HLogBuf != NULL) Log1Byte(cv,CR); |
if (cv->HLogBuf != NULL) Log1Byte(cv,CR); |
70 |
} |
} |
71 |
|
|
72 |
void Tab(PTEKVar tk, PComVar cv) |
void Tab(PTEKVar tk, PComVar cv) |
73 |
{ |
{ |
74 |
if (cv->HLogBuf != NULL) Log1Byte(cv,HT); |
if (cv->HLogBuf != NULL) Log1Byte(cv,HT); |
75 |
tk->CaretX = tk->CaretX + (tk->FontWidth << 3); |
tk->CaretX = tk->CaretX + (tk->FontWidth << 3); |
76 |
if (tk->CaretX >= tk->ScreenWidth) |
if (tk->CaretX >= tk->ScreenWidth) |
77 |
{ |
{ |
78 |
CarriageReturn(tk,cv); |
CarriageReturn(tk,cv); |
79 |
LineFeed(tk,cv); |
LineFeed(tk,cv); |
80 |
} |
} |
81 |
} |
} |
82 |
|
|
83 |
void EnterVectorMode(PTEKVar tk) |
void EnterVectorMode(PTEKVar tk) |
84 |
{ |
{ |
85 |
tk->MoveFlag = TRUE; |
tk->MoveFlag = TRUE; |
86 |
tk->Drawing = FALSE; |
tk->Drawing = FALSE; |
87 |
tk->DispMode = IdVectorMode; |
tk->DispMode = IdVectorMode; |
88 |
} |
} |
89 |
|
|
90 |
void EnterMarkerMode(PTEKVar tk) |
void EnterMarkerMode(PTEKVar tk) |
91 |
{ |
{ |
92 |
tk->MoveFlag = TRUE; |
tk->MoveFlag = TRUE; |
93 |
tk->Drawing = FALSE; |
tk->Drawing = FALSE; |
94 |
tk->DispMode = IdMarkerMode; |
tk->DispMode = IdMarkerMode; |
95 |
} |
} |
96 |
|
|
97 |
void EnterPlotMode(PTEKVar tk) |
void EnterPlotMode(PTEKVar tk) |
98 |
{ |
{ |
99 |
if (tk->DispMode == IdAlphaMode) |
if (tk->DispMode == IdAlphaMode) |
100 |
tk->CaretOffset = 0; |
tk->CaretOffset = 0; |
101 |
|
|
102 |
tk->PlotX = |
tk->PlotX = |
103 |
(int)((float)(tk->CaretX) / (float)(tk->ScreenWidth) * |
(int)((float)(tk->CaretX) / (float)(tk->ScreenWidth) * |
104 |
(float)(ViewSizeX)); |
(float)(ViewSizeX)); |
105 |
tk->PlotY = |
tk->PlotY = |
106 |
(int)((float)(tk->ScreenHeight-1-tk->CaretY) / |
(int)((float)(tk->ScreenHeight-1-tk->CaretY) / |
107 |
(float)(tk->ScreenHeight) * (float)(ViewSizeY)); |
(float)(tk->ScreenHeight) * (float)(ViewSizeY)); |
108 |
tk->DispMode = IdPlotMode; |
tk->DispMode = IdPlotMode; |
109 |
tk->JustAfterRS = TRUE; |
tk->JustAfterRS = TRUE; |
110 |
} |
} |
111 |
|
|
112 |
void EnterAlphaMode(PTEKVar tk) |
void EnterAlphaMode(PTEKVar tk) |
113 |
{ |
{ |
114 |
if ((tk->DispMode == IdVectorMode) || |
if ((tk->DispMode == IdVectorMode) || |
115 |
(tk->DispMode == IdPlotMode)) |
(tk->DispMode == IdPlotMode)) |
116 |
tk->CaretOffset = 0; |
tk->CaretOffset = 0; |
117 |
|
|
118 |
tk->DispMode = IdAlphaMode; |
tk->DispMode = IdAlphaMode; |
119 |
tk->Drawing = FALSE; |
tk->Drawing = FALSE; |
120 |
} |
} |
121 |
|
|
122 |
void EnterUnknownMode(PTEKVar tk) |
void EnterUnknownMode(PTEKVar tk) |
123 |
{ |
{ |
124 |
if ((tk->DispMode == IdVectorMode) || |
if ((tk->DispMode == IdVectorMode) || |
125 |
(tk->DispMode == IdPlotMode)) |
(tk->DispMode == IdPlotMode)) |
126 |
tk->CaretOffset = 0; |
tk->CaretOffset = 0; |
127 |
|
|
128 |
tk->DispMode = IdUnknownMode; |
tk->DispMode = IdUnknownMode; |
129 |
} |
} |
130 |
|
|
131 |
void TEKMoveTo(PTEKVar tk, PTTSet ts, int X, int Y, BOOL Draw) |
void TEKMoveTo(PTEKVar tk, PTTSet ts, int X, int Y, BOOL Draw) |
132 |
{ |
{ |
133 |
HDC DC; |
HDC DC; |
134 |
HPEN OldPen; |
HPEN OldPen; |
135 |
|
|
136 |
if (Draw) |
if (Draw) |
137 |
{ |
{ |
138 |
DC = GetDC(tk->HWin); |
DC = GetDC(tk->HWin); |
139 |
OldPen = SelectObject(DC,tk->Pen); |
OldPen = SelectObject(DC,tk->Pen); |
140 |
SetBkColor(DC,ts->TEKColor[1]); |
SetBkColor(DC,ts->TEKColor[1]); |
141 |
SetBkMode(DC, 1); |
SetBkMode(DC, 1); |
142 |
if ((tk->CaretX == X) && (tk->CaretY==Y)) |
if ((tk->CaretX == X) && (tk->CaretY==Y)) |
143 |
{ |
{ |
144 |
SetPixel(DC,X,Y,tk->PenColor); |
SetPixel(DC,X,Y,tk->PenColor); |
145 |
SetPixel(tk->MemDC,X,Y,tk->MemPenColor); |
SetPixel(tk->MemDC,X,Y,tk->MemPenColor); |
146 |
} |
} |
147 |
else { |
else { |
148 |
MoveToEx(DC,tk->CaretX,tk->CaretY,NULL); |
MoveToEx(DC,tk->CaretX,tk->CaretY,NULL); |
149 |
LineTo(DC,X,Y); |
LineTo(DC,X,Y); |
150 |
MoveToEx(tk->MemDC,tk->CaretX,tk->CaretY,NUL); |
MoveToEx(tk->MemDC,tk->CaretX,tk->CaretY,NUL); |
151 |
LineTo(tk->MemDC,X,Y); |
LineTo(tk->MemDC,X,Y); |
152 |
} |
} |
153 |
SelectObject(DC,OldPen); |
SelectObject(DC,OldPen); |
154 |
ReleaseDC(tk->HWin,DC); |
ReleaseDC(tk->HWin,DC); |
155 |
} |
} |
156 |
tk->CaretX = X; |
tk->CaretX = X; |
157 |
tk->CaretY = Y; |
tk->CaretY = Y; |
158 |
} |
} |
159 |
|
|
160 |
void DrawMarker(PTEKVar tk) |
void DrawMarker(PTEKVar tk) |
161 |
{ |
{ |
162 |
BYTE b; |
BYTE b; |
163 |
RECT R; |
RECT R; |
164 |
HFONT OldFont; |
HFONT OldFont; |
165 |
COLORREF OldColor; |
COLORREF OldColor; |
166 |
|
|
167 |
switch (tk->MarkerType) { |
switch (tk->MarkerType) { |
168 |
case 0: b = 0xb7; break; |
case 0: b = 0xb7; break; |
169 |
case 1: b = '+'; break; |
case 1: b = '+'; break; |
170 |
case 2: b = 0xc5; break; |
case 2: b = 0xc5; break; |
171 |
case 3: b = '*'; break; |
case 3: b = '*'; break; |
172 |
case 4: b = 'o'; break; |
case 4: b = 'o'; break; |
173 |
case 5: b = 0xb4; break; |
case 5: b = 0xb4; break; |
174 |
case 6: b = 'O'; break; |
case 6: b = 'O'; break; |
175 |
case 7: b = 0xe0; break; |
case 7: b = 0xe0; break; |
176 |
case 8: b = 0xc6; break; |
case 8: b = 0xc6; break; |
177 |
case 9: b = 0xa8; break; |
case 9: b = 0xa8; break; |
178 |
case 10: b = 0xa7; break; |
case 10: b = 0xa7; break; |
179 |
default: |
default: |
180 |
b = '+'; |
b = '+'; |
181 |
} |
} |
182 |
OldFont = SelectObject(tk->MemDC,tk->MarkerFont); |
OldFont = SelectObject(tk->MemDC,tk->MarkerFont); |
183 |
OldColor = SetTextColor(tk->MemDC,tk->PenColor); |
OldColor = SetTextColor(tk->MemDC,tk->PenColor); |
184 |
SetTextAlign(tk->MemDC,TA_CENTER | TA_BOTTOM | TA_NOUPDATECP); |
SetTextAlign(tk->MemDC,TA_CENTER | TA_BOTTOM | TA_NOUPDATECP); |
185 |
ExtTextOut(tk->MemDC,tk->CaretX,tk->CaretY+tk->MarkerH/2, |
ExtTextOut(tk->MemDC,tk->CaretX,tk->CaretY+tk->MarkerH/2, |
186 |
0,NULL,&b,1,NULL); |
0,NULL,&b,1,NULL); |
187 |
SetTextAlign(tk->MemDC,TA_LEFT | TA_BOTTOM | TA_NOUPDATECP); |
SetTextAlign(tk->MemDC,TA_LEFT | TA_BOTTOM | TA_NOUPDATECP); |
188 |
SelectObject(tk->MemDC,OldFont); |
SelectObject(tk->MemDC,OldFont); |
189 |
SetTextColor(tk->MemDC,OldColor); |
SetTextColor(tk->MemDC,OldColor); |
190 |
R.left = tk->CaretX- tk->MarkerW; |
R.left = tk->CaretX- tk->MarkerW; |
191 |
R.right = tk->CaretX + tk->MarkerW; |
R.right = tk->CaretX + tk->MarkerW; |
192 |
R.top = tk->CaretY - tk->MarkerH; |
R.top = tk->CaretY - tk->MarkerH; |
193 |
R.bottom = tk->CaretY + tk->MarkerH; |
R.bottom = tk->CaretY + tk->MarkerH; |
194 |
InvalidateRect(tk->HWin,&R,FALSE); |
InvalidateRect(tk->HWin,&R,FALSE); |
195 |
} |
} |
196 |
|
|
197 |
void Draw(PTEKVar tk, PComVar cv, PTTSet ts, BYTE b) |
void Draw(PTEKVar tk, PComVar cv, PTTSet ts, BYTE b) |
198 |
{ |
{ |
199 |
int X, Y; |
int X, Y; |
200 |
|
|
201 |
if (! tk->Drawing) |
if (! tk->Drawing) |
202 |
{ |
{ |
203 |
tk->LoXReceive = FALSE; |
tk->LoXReceive = FALSE; |
204 |
tk->LoCount = 0; |
tk->LoCount = 0; |
205 |
tk->Drawing = TRUE; |
tk->Drawing = TRUE; |
206 |
if (tk->DispMode==IdMarkerMode) |
if (tk->DispMode==IdMarkerMode) |
207 |
{ |
{ |
208 |
tk->MoveFlag = TRUE; |
tk->MoveFlag = TRUE; |
209 |
tk->MarkerFlag = TRUE; |
tk->MarkerFlag = TRUE; |
210 |
} |
} |
211 |
else |
else |
212 |
tk->MarkerFlag = FALSE; |
tk->MarkerFlag = FALSE; |
213 |
} |
} |
214 |
|
|
215 |
if (b<=0x1f) |
if (b<=0x1f) |
216 |
{ |
{ |
217 |
CommInsert1Byte(cv,b); |
CommInsert1Byte(cv,b); |
218 |
return; |
return; |
219 |
} |
} |
220 |
else if ((b>=0x20) && (b<=0x3f)) |
else if ((b>=0x20) && (b<=0x3f)) |
221 |
{ |
{ |
222 |
if (tk->LoCount==0) |
if (tk->LoCount==0) |
223 |
tk->HiY = b - 0x20; |
tk->HiY = b - 0x20; |
224 |
else |
else |
225 |
tk->HiX = b - 0x20; |
tk->HiX = b - 0x20; |
226 |
} |
} |
227 |
else if ((b>=0x40) && (b<=0x5f)) |
else if ((b>=0x40) && (b<=0x5f)) |
228 |
{ |
{ |
229 |
tk->LoX = b - 0x40; |
tk->LoX = b - 0x40; |
230 |
tk->LoXReceive = TRUE; |
tk->LoXReceive = TRUE; |
231 |
} |
} |
232 |
else if ((b>=0x60) && (b<=0x7f)) |
else if ((b>=0x60) && (b<=0x7f)) |
233 |
{ |
{ |
234 |
tk->LoA = tk->LoB; |
tk->LoA = tk->LoB; |
235 |
tk->LoB = b - 0x60; |
tk->LoB = b - 0x60; |
236 |
tk->LoCount++; |
tk->LoCount++; |
237 |
} |
} |
238 |
|
|
239 |
if (! tk->LoXReceive) return; |
if (! tk->LoXReceive) return; |
240 |
|
|
241 |
tk->Drawing = FALSE; |
tk->Drawing = FALSE; |
242 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
243 |
|
|
244 |
if (tk->LoCount > 1) |
if (tk->LoCount > 1) |
245 |
tk->Extra = tk->LoA; |
tk->Extra = tk->LoA; |
246 |
if (tk->LoCount > 0) |
if (tk->LoCount > 0) |
247 |
tk->LoY = tk->LoB; |
tk->LoY = tk->LoB; |
248 |
|
|
249 |
X = (int)((float)(tk->HiX*128 + tk->LoX*4 + (tk->Extra & 3)) / |
X = (int)((float)(tk->HiX*128 + tk->LoX*4 + (tk->Extra & 3)) / |
250 |
(float)(ViewSizeX) * (float)(tk->ScreenWidth)); |
(float)(ViewSizeX) * (float)(tk->ScreenWidth)); |
251 |
Y = tk->ScreenHeight - 1 - |
Y = tk->ScreenHeight - 1 - |
252 |
(int)((float)(tk->HiY * 128 + tk->LoY * 4 + tk->Extra / 4) / |
(int)((float)(tk->HiY * 128 + tk->LoY * 4 + tk->Extra / 4) / |
253 |
(float)(ViewSizeY) * (float)(tk->ScreenHeight)); |
(float)(ViewSizeY) * (float)(tk->ScreenHeight)); |
254 |
TEKMoveTo(tk,ts,X,Y,! tk->MoveFlag); |
TEKMoveTo(tk,ts,X,Y,! tk->MoveFlag); |
255 |
tk->MoveFlag = FALSE; |
tk->MoveFlag = FALSE; |
256 |
if (tk->MarkerFlag) |
if (tk->MarkerFlag) |
257 |
DrawMarker(tk); |
DrawMarker(tk); |
258 |
tk->MarkerFlag = FALSE; |
tk->MarkerFlag = FALSE; |
259 |
} |
} |
260 |
|
|
261 |
void Plot(PTEKVar tk, PTTSet ts, BYTE b) |
void Plot(PTEKVar tk, PTTSet ts, BYTE b) |
262 |
{ |
{ |
263 |
int X, Y; |
int X, Y; |
264 |
|
|
265 |
X = 0; |
X = 0; |
266 |
Y = 0; |
Y = 0; |
267 |
switch (b) { |
switch (b) { |
268 |
case 'A': X = 4; break; |
case 'A': X = 4; break; |
269 |
case 'B': X = -4; break; |
case 'B': X = -4; break; |
270 |
case 'D': Y = 4; break; |
case 'D': Y = 4; break; |
271 |
case 'E': |
case 'E': |
272 |
X = 4; |
X = 4; |
273 |
Y = 4; |
Y = 4; |
274 |
break; |
break; |
275 |
case 'F': |
case 'F': |
276 |
X = -4; |
X = -4; |
277 |
Y = 4; |
Y = 4; |
278 |
break; |
break; |
279 |
case 'H': Y = -4; break; |
case 'H': Y = -4; break; |
280 |
case 'I': |
case 'I': |
281 |
X = 4; |
X = 4; |
282 |
Y = -4; |
Y = -4; |
283 |
break; |
break; |
284 |
case 'J': |
case 'J': |
285 |
X = -4; |
X = -4; |
286 |
Y = -4; |
Y = -4; |
287 |
break; |
break; |
288 |
default: |
default: |
289 |
return; |
return; |
290 |
} |
} |
291 |
tk->PlotX = tk->PlotX + X; |
tk->PlotX = tk->PlotX + X; |
292 |
if (tk->PlotX < 0) tk->PlotX = 0; |
if (tk->PlotX < 0) tk->PlotX = 0; |
293 |
if (tk->PlotX >= ViewSizeX) |
if (tk->PlotX >= ViewSizeX) |
294 |
tk->PlotX = ViewSizeX - 1; |
tk->PlotX = ViewSizeX - 1; |
295 |
tk->PlotY = tk->PlotY + Y; |
tk->PlotY = tk->PlotY + Y; |
296 |
if (tk->PlotY < 0) tk->PlotY = 0; |
if (tk->PlotY < 0) tk->PlotY = 0; |
297 |
if (tk->PlotY >= ViewSizeY) |
if (tk->PlotY >= ViewSizeY) |
298 |
tk->PlotY = ViewSizeY - 1; |
tk->PlotY = ViewSizeY - 1; |
299 |
X = (int)((float)(tk->PlotX) / (float)(ViewSizeX) * |
X = (int)((float)(tk->PlotX) / (float)(ViewSizeX) * |
300 |
(float)(tk->ScreenWidth)); |
(float)(tk->ScreenWidth)); |
301 |
Y = tk->ScreenHeight - 1 - |
Y = tk->ScreenHeight - 1 - |
302 |
(int)((float)(tk->PlotY) / (float)(ViewSizeY) * |
(int)((float)(tk->PlotY) / (float)(ViewSizeY) * |
303 |
(float)(tk->ScreenHeight)); |
(float)(tk->ScreenHeight)); |
304 |
TEKMoveTo(tk,ts,X,Y,tk->PenDown); |
TEKMoveTo(tk,ts,X,Y,tk->PenDown); |
305 |
} |
} |
306 |
|
|
307 |
void DispChar(PTEKVar tk, PComVar cv, BYTE b) |
void DispChar(PTEKVar tk, PComVar cv, BYTE b) |
308 |
{ |
{ |
309 |
int Dx[2]; |
int Dx[2]; |
310 |
RECT R; |
RECT R; |
311 |
|
|
312 |
Dx[0] = tk->FontWidth; |
Dx[0] = tk->FontWidth; |
313 |
Dx[1] = tk->FontWidth; |
Dx[1] = tk->FontWidth; |
314 |
ExtTextOut(tk->MemDC,tk->CaretX,tk->CaretY,0,NULL,&b,1,&Dx[0]); |
ExtTextOut(tk->MemDC,tk->CaretX,tk->CaretY,0,NULL,&b,1,&Dx[0]); |
315 |
R.left = tk->CaretX; |
R.left = tk->CaretX; |
316 |
R.right = tk->CaretX + tk->FontWidth; |
R.right = tk->CaretX + tk->FontWidth; |
317 |
R.top = tk->CaretY - tk->FontHeight; |
R.top = tk->CaretY - tk->FontHeight; |
318 |
R.bottom = tk->CaretY; |
R.bottom = tk->CaretY; |
319 |
InvalidateRect(tk->HWin,&R,FALSE); |
InvalidateRect(tk->HWin,&R,FALSE); |
320 |
tk->CaretX = R.right; |
tk->CaretX = R.right; |
321 |
|
|
322 |
if (cv->HLogBuf != NULL) Log1Byte(cv,b); |
if (cv->HLogBuf != NULL) Log1Byte(cv,b); |
323 |
|
|
324 |
if (tk->CaretX > tk->ScreenWidth - tk->FontWidth) |
if (tk->CaretX > tk->ScreenWidth - tk->FontWidth) |
325 |
{ |
{ |
326 |
CarriageReturn(tk,cv); |
CarriageReturn(tk,cv); |
327 |
LineFeed(tk,cv); |
LineFeed(tk,cv); |
328 |
} |
} |
329 |
} |
} |
330 |
|
|
331 |
void TEKBeep(PTTSet ts) |
void TEKBeep(PTTSet ts) |
332 |
{ |
{ |
333 |
if (ts->Beep!=0) |
if (ts->Beep!=0) |
334 |
MessageBeep(0); |
MessageBeep(0); |
335 |
} |
} |
336 |
|
|
337 |
void ParseFirst(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
void ParseFirst(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
338 |
{ |
{ |
339 |
if (tk->DispMode == IdAlphaMode) |
if (tk->DispMode == IdAlphaMode) |
340 |
{ |
{ |
341 |
switch (b) { |
switch (b) { |
342 |
case 0x07: TEKBeep(ts); break; |
case 0x07: TEKBeep(ts); break; |
343 |
case 0x08: BackSpace(tk,cv); break; |
case 0x08: BackSpace(tk,cv); break; |
344 |
case 0x09: Tab(tk,cv); break; |
case 0x09: Tab(tk,cv); break; |
345 |
case 0x0a: LineFeed(tk,cv); break; |
case 0x0a: LineFeed(tk,cv); break; |
346 |
case 0x0b: |
case 0x0b: |
347 |
case 0x0c: break; |
case 0x0c: break; |
348 |
case 0x0d: |
case 0x0d: |
349 |
CarriageReturn(tk,cv); |
CarriageReturn(tk,cv); |
350 |
if (ts->CRReceive==IdCRLF) |
if (ts->CRReceive==IdCRLF) |
351 |
CommInsert1Byte(cv,0x0A); |
CommInsert1Byte(cv,0x0A); |
352 |
break; |
break; |
353 |
case 0x18: |
case 0x18: |
354 |
if (ts->AutoWinSwitch > 0) |
if (ts->AutoWinSwitch > 0) |
355 |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
356 |
break; |
break; |
357 |
case 0x19: |
case 0x19: |
358 |
case 0x1a: break; |
case 0x1a: break; |
359 |
case 0x1b: |
case 0x1b: |
360 |
tk->ParseMode = ModeEscape; |
tk->ParseMode = ModeEscape; |
361 |
return; |
return; |
362 |
case 0x1c: EnterMarkerMode(tk); break; |
case 0x1c: EnterMarkerMode(tk); break; |
363 |
case 0x1d: EnterVectorMode(tk); break; |
case 0x1d: EnterVectorMode(tk); break; |
364 |
case 0x1e: EnterPlotMode(tk); break; |
case 0x1e: EnterPlotMode(tk); break; |
365 |
case 0x1f: break; |
case 0x1f: break; |
366 |
case 0x7f: if (tk->Drawing) Draw(tk,cv,ts,b); break; |
case 0x7f: if (tk->Drawing) Draw(tk,cv,ts,b); break; |
367 |
default: |
default: |
368 |
if (b<=0x06) break; |
if (b<=0x06) break; |
369 |
if ((b>=0x0e) && (b<=0x17)) break; |
if ((b>=0x0e) && (b<=0x17)) break; |
370 |
if (tk->Drawing) Draw(tk,cv,ts,b); |
if (tk->Drawing) Draw(tk,cv,ts,b); |
371 |
else DispChar(tk,cv,b); |
else DispChar(tk,cv,b); |
372 |
} |
} |
373 |
} |
} |
374 |
else if ((tk->DispMode==IdVectorMode) || |
else if ((tk->DispMode==IdVectorMode) || |
375 |
(tk->DispMode==IdMarkerMode)) |
(tk->DispMode==IdMarkerMode)) |
376 |
{ |
{ |
377 |
switch (b) { |
switch (b) { |
378 |
case 0x07: |
case 0x07: |
379 |
if (tk->MoveFlag) |
if (tk->MoveFlag) |
380 |
tk->MoveFlag = FALSE; |
tk->MoveFlag = FALSE; |
381 |
else |
else |
382 |
TEKBeep(ts); |
TEKBeep(ts); |
383 |
break; |
break; |
384 |
case 0x0d: |
case 0x0d: |
385 |
CommInsert1Byte(cv,0x0d); |
CommInsert1Byte(cv,0x0d); |
386 |
EnterAlphaMode(tk); /* EnterAlphaMode */ |
EnterAlphaMode(tk); /* EnterAlphaMode */ |
387 |
break; |
break; |
388 |
case 0x18: |
case 0x18: |
389 |
if (ts->AutoWinSwitch > 0) |
if (ts->AutoWinSwitch > 0) |
390 |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
391 |
break; |
break; |
392 |
case 0x19: |
case 0x19: |
393 |
case 0x1a: break; |
case 0x1a: break; |
394 |
case 0x1b: |
case 0x1b: |
395 |
tk->ParseMode = ModeEscape; |
tk->ParseMode = ModeEscape; |
396 |
return; |
return; |
397 |
case 0x1c: EnterMarkerMode(tk); break; |
case 0x1c: EnterMarkerMode(tk); break; |
398 |
case 0x1d: EnterVectorMode(tk); break; |
case 0x1d: EnterVectorMode(tk); break; |
399 |
case 0x1e: EnterPlotMode(tk); break; |
case 0x1e: EnterPlotMode(tk); break; |
400 |
case 0x1f: EnterAlphaMode(tk); break; |
case 0x1f: EnterAlphaMode(tk); break; |
401 |
default: |
default: |
402 |
if (b<=0x06) break; |
if (b<=0x06) break; |
403 |
if ((b>=0x08) && (b<=0x0c)) break; |
if ((b>=0x08) && (b<=0x0c)) break; |
404 |
if ((b>=0x0e) && (b<=0x17)) break; |
if ((b>=0x0e) && (b<=0x17)) break; |
405 |
Draw(tk,cv,ts,b); |
Draw(tk,cv,ts,b); |
406 |
} |
} |
407 |
} |
} |
408 |
else if (tk->DispMode==IdPlotMode) |
else if (tk->DispMode==IdPlotMode) |
409 |
{ |
{ |
410 |
switch (b) { |
switch (b) { |
411 |
case 0x07: TEKBeep(ts); break; |
case 0x07: TEKBeep(ts); break; |
412 |
case 0x0d: |
case 0x0d: |
413 |
CommInsert1Byte(cv,0x0d); |
CommInsert1Byte(cv,0x0d); |
414 |
EnterAlphaMode(tk); /* EnterAlphaMode */ |
EnterAlphaMode(tk); /* EnterAlphaMode */ |
415 |
break; |
break; |
416 |
case 0x18: |
case 0x18: |
417 |
if (ts->AutoWinSwitch > 0) |
if (ts->AutoWinSwitch > 0) |
418 |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
419 |
break; |
break; |
420 |
case 0x19: |
case 0x19: |
421 |
case 0x1a: break; |
case 0x1a: break; |
422 |
case 0x1b: |
case 0x1b: |
423 |
tk->ParseMode = ModeEscape; |
tk->ParseMode = ModeEscape; |
424 |
return; |
return; |
425 |
case 0x1c: EnterMarkerMode(tk); break; |
case 0x1c: EnterMarkerMode(tk); break; |
426 |
case 0x1d: EnterVectorMode(tk); break; |
case 0x1d: EnterVectorMode(tk); break; |
427 |
case 0x1e: EnterPlotMode(tk); break; |
case 0x1e: EnterPlotMode(tk); break; |
428 |
case 0x1f: EnterAlphaMode(tk); break; /* EnterAlphaMode */ |
case 0x1f: EnterAlphaMode(tk); break; /* EnterAlphaMode */ |
429 |
case 0x7f: break; |
case 0x7f: break; |
430 |
default: |
default: |
431 |
if (b<=0x06) break; |
if (b<=0x06) break; |
432 |
if ((b>=0x08) && (b<=0x0c)) break; |
if ((b>=0x08) && (b<=0x0c)) break; |
433 |
if ((b>=0x0e) && (b<=0x17)) break; |
if ((b>=0x0e) && (b<=0x17)) break; |
434 |
|
|
435 |
if (tk->JustAfterRS) |
if (tk->JustAfterRS) |
436 |
{ |
{ |
437 |
if (b==0x20) |
if (b==0x20) |
438 |
tk->PenDown = FALSE; |
tk->PenDown = FALSE; |
439 |
else if (b=='P') |
else if (b=='P') |
440 |
tk->PenDown = TRUE; |
tk->PenDown = TRUE; |
441 |
else |
else |
442 |
EnterUnknownMode(tk); |
EnterUnknownMode(tk); |
443 |
tk->JustAfterRS = FALSE; |
tk->JustAfterRS = FALSE; |
444 |
} |
} |
445 |
else |
else |
446 |
Plot(tk,ts,b); |
Plot(tk,ts,b); |
447 |
} |
} |
448 |
} |
} |
449 |
else { |
else { |
450 |
switch (b) { |
switch (b) { |
451 |
case 0x1f: EnterAlphaMode(tk); break; |
case 0x1f: EnterAlphaMode(tk); break; |
452 |
} |
} |
453 |
} |
} |
454 |
|
|
455 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
456 |
} |
} |
457 |
|
|
458 |
void SelectCode(PTEKVar tk, PTTSet ts, BYTE b) |
void SelectCode(PTEKVar tk, PTTSet ts, BYTE b) |
459 |
{ |
{ |
460 |
switch (b) { |
switch (b) { |
461 |
case ' ': |
case ' ': |
462 |
if (tk->SelectCodeFlag == '#') |
if (tk->SelectCodeFlag == '#') |
463 |
tk->SelectCodeFlag = b; |
tk->SelectCodeFlag = b; |
464 |
return; |
return; |
465 |
case '!': |
case '!': |
466 |
if (tk->SelectCodeFlag == '%') |
if (tk->SelectCodeFlag == '%') |
467 |
tk->SelectCodeFlag = b; |
tk->SelectCodeFlag = b; |
468 |
return; |
return; |
469 |
case '0': break; |
case '0': break; |
470 |
case '1': |
case '1': |
471 |
case '2': |
case '2': |
472 |
if ((tk->SelectCodeFlag == ' ') || |
if ((tk->SelectCodeFlag == ' ') || |
473 |
(tk->SelectCodeFlag == '!')) |
(tk->SelectCodeFlag == '!')) |
474 |
tk->ChangeEmu = IdVT; /* enter VT mode */ |
tk->ChangeEmu = IdVT; /* enter VT mode */ |
475 |
break; |
break; |
476 |
case '3': |
case '3': |
477 |
if (tk->SelectCodeFlag == '!') |
if (tk->SelectCodeFlag == '!') |
478 |
tk->ChangeEmu = IdVT; /* enter VT mode */ |
tk->ChangeEmu = IdVT; /* enter VT mode */ |
479 |
break; |
break; |
480 |
case '5': |
case '5': |
481 |
if (tk->SelectCodeFlag == ' ') |
if (tk->SelectCodeFlag == ' ') |
482 |
tk->ChangeEmu = IdVT; /* enter VT mode */ |
tk->ChangeEmu = IdVT; /* enter VT mode */ |
483 |
break; |
break; |
484 |
default: |
default: |
485 |
if (b <= US) return; |
if (b <= US) return; |
486 |
} |
} |
487 |
if ((0x20<=b) && (b<0x7f)) tk->ParseMode = ModeFirst; |
if ((0x20<=b) && (b<0x7f)) tk->ParseMode = ModeFirst; |
488 |
tk->SelectCodeFlag = 0; |
tk->SelectCodeFlag = 0; |
489 |
if (ts->AutoWinSwitch == 0) tk->ChangeEmu = 0; |
if (ts->AutoWinSwitch == 0) tk->ChangeEmu = 0; |
490 |
} |
} |
491 |
|
|
492 |
COLORREF ColorIndex(COLORREF Fore, COLORREF Back, WORD w) |
COLORREF ColorIndex(COLORREF Fore, COLORREF Back, WORD w) |
493 |
{ |
{ |
494 |
switch (w) { |
switch (w) { |
495 |
case 1: return Fore; |
case 1: return Fore; |
496 |
case 2: return RGB(255, 0, 0); /* Red */ |
case 2: return RGB(255, 0, 0); /* Red */ |
497 |
case 3: return RGB( 0,255, 0); /* Green */ |
case 3: return RGB( 0,255, 0); /* Green */ |
498 |
case 4: return RGB( 0, 0,255); /* Blue */ |
case 4: return RGB( 0, 0,255); /* Blue */ |
499 |
case 5: return RGB( 0,255,255); /* Cyan */ |
case 5: return RGB( 0,255,255); /* Cyan */ |
500 |
case 6: return RGB(255, 0,255); /* Magenta */ |
case 6: return RGB(255, 0,255); /* Magenta */ |
501 |
case 7: return RGB(255,255, 0); /* Yellow */ |
case 7: return RGB(255,255, 0); /* Yellow */ |
502 |
case 8: return RGB(255,128, 0); /* Orange */ |
case 8: return RGB(255,128, 0); /* Orange */ |
503 |
case 9: return RGB(128,255, 0); /* Green-Yellow */ |
case 9: return RGB(128,255, 0); /* Green-Yellow */ |
504 |
case 10: return RGB( 0,255,128); /* Green-Cyan */ |
case 10: return RGB( 0,255,128); /* Green-Cyan */ |
505 |
case 11: return RGB( 0,128,255); /* Blue-Cyan */ |
case 11: return RGB( 0,128,255); /* Blue-Cyan */ |
506 |
case 12: return RGB(128, 0,255); /* Blue-Magenta */ |
case 12: return RGB(128, 0,255); /* Blue-Magenta */ |
507 |
case 13: return RGB(255, 0,128); /* Red-Magenta */ |
case 13: return RGB(255, 0,128); /* Red-Magenta */ |
508 |
case 14: return RGB( 85, 85, 85); /* Dark gray */ |
case 14: return RGB( 85, 85, 85); /* Dark gray */ |
509 |
case 15: return RGB(170,170,170); /* Light gray */ |
case 15: return RGB(170,170,170); /* Light gray */ |
510 |
} |
} |
511 |
return Back; |
return Back; |
512 |
} |
} |
513 |
|
|
514 |
void SetLineIndex(PTEKVar tk, PTTSet ts, WORD w) |
void SetLineIndex(PTEKVar tk, PTTSet ts, WORD w) |
515 |
// change graphic color |
// change graphic color |
516 |
{ |
{ |
517 |
HDC TempDC; |
HDC TempDC; |
518 |
|
|
519 |
tk->PenColor = ColorIndex(ts->TEKColor[0],ts->TEKColor[1],w); |
tk->PenColor = ColorIndex(ts->TEKColor[0],ts->TEKColor[1],w); |
520 |
TempDC = GetDC(tk->HWin); |
TempDC = GetDC(tk->HWin); |
521 |
tk->PenColor = GetNearestColor(TempDC,tk->PenColor); |
tk->PenColor = GetNearestColor(TempDC,tk->PenColor); |
522 |
ReleaseDC(tk->HWin,TempDC); |
ReleaseDC(tk->HWin,TempDC); |
523 |
if (ts->TEKColorEmu > 0) |
if (ts->TEKColorEmu > 0) |
524 |
tk->MemPenColor = tk->PenColor; |
tk->MemPenColor = tk->PenColor; |
525 |
else |
else |
526 |
if (tk->PenColor == ts->TEKColor[1]) |
if (tk->PenColor == ts->TEKColor[1]) |
527 |
tk->MemPenColor = tk->MemBackColor; |
tk->MemPenColor = tk->MemBackColor; |
528 |
else |
else |
529 |
tk->MemPenColor = tk->MemForeColor; |
tk->MemPenColor = tk->MemForeColor; |
530 |
|
|
531 |
DeleteObject(tk->Pen); |
DeleteObject(tk->Pen); |
532 |
tk->Pen = CreatePen(tk->ps,1,tk->PenColor); |
tk->Pen = CreatePen(tk->ps,1,tk->PenColor); |
533 |
|
|
534 |
SelectObject(tk->MemDC, tk->OldMemPen); |
SelectObject(tk->MemDC, tk->OldMemPen); |
535 |
DeleteObject(tk->MemPen); |
DeleteObject(tk->MemPen); |
536 |
tk->MemPen = CreatePen(tk->ps,1,tk->MemPenColor); |
tk->MemPen = CreatePen(tk->ps,1,tk->MemPenColor); |
537 |
tk->OldMemPen = SelectObject(tk->MemDC,tk->MemPen); |
tk->OldMemPen = SelectObject(tk->MemDC,tk->MemPen); |
538 |
} |
} |
539 |
|
|
540 |
void SetTextIndex(PTEKVar tk, PTTSet ts, WORD w) |
void SetTextIndex(PTEKVar tk, PTTSet ts, WORD w) |
541 |
// change text color |
// change text color |
542 |
{ |
{ |
543 |
HDC TempDC; |
HDC TempDC; |
544 |
|
|
545 |
tk->TextColor = ColorIndex(ts->TEKColor[0],ts->TEKColor[1],w); |
tk->TextColor = ColorIndex(ts->TEKColor[0],ts->TEKColor[1],w); |
546 |
TempDC = GetDC(tk->HWin); |
TempDC = GetDC(tk->HWin); |
547 |
tk->TextColor = GetNearestColor(TempDC,tk->TextColor); |
tk->TextColor = GetNearestColor(TempDC,tk->TextColor); |
548 |
ReleaseDC(tk->HWin,TempDC); |
ReleaseDC(tk->HWin,TempDC); |
549 |
if (ts->TEKColorEmu > 0) |
if (ts->TEKColorEmu > 0) |
550 |
tk->MemTextColor = tk->TextColor; |
tk->MemTextColor = tk->TextColor; |
551 |
else |
else |
552 |
if (tk->TextColor == ts->TEKColor[1]) |
if (tk->TextColor == ts->TEKColor[1]) |
553 |
tk->MemTextColor = tk->MemBackColor; |
tk->MemTextColor = tk->MemBackColor; |
554 |
else |
else |
555 |
tk->MemTextColor = tk->MemForeColor; |
tk->MemTextColor = tk->MemForeColor; |
556 |
|
|
557 |
SetTextColor(tk->MemDC, tk->MemTextColor); |
SetTextColor(tk->MemDC, tk->MemTextColor); |
558 |
} |
} |
559 |
|
|
560 |
void SetColorIndex(PTEKVar tk, PTTSet ts, WORD w) |
void SetColorIndex(PTEKVar tk, PTTSet ts, WORD w) |
561 |
// change color for text & graphics |
// change color for text & graphics |
562 |
{ |
{ |
563 |
SetLineIndex(tk,ts,w); |
SetLineIndex(tk,ts,w); |
564 |
SetTextIndex(tk,ts,w); |
SetTextIndex(tk,ts,w); |
565 |
} |
} |
566 |
|
|
567 |
void SetLineStyle(PTEKVar tk, BYTE b) |
void SetLineStyle(PTEKVar tk, BYTE b) |
568 |
{ |
{ |
569 |
switch (b) { |
switch (b) { |
570 |
case 0: tk->ps = PS_SOLID; break; |
case 0: tk->ps = PS_SOLID; break; |
571 |
case 1: tk->ps = PS_DOT; break; |
case 1: tk->ps = PS_DOT; break; |
572 |
case 2: tk->ps = PS_DASHDOT; break; |
case 2: tk->ps = PS_DASHDOT; break; |
573 |
case 3: tk->ps = PS_DASH; break; |
case 3: tk->ps = PS_DASH; break; |
574 |
case 4: tk->ps = PS_DASH; break; |
case 4: tk->ps = PS_DASH; break; |
575 |
case 5: tk->ps = PS_DASHDOTDOT; break; |
case 5: tk->ps = PS_DASHDOTDOT; break; |
576 |
case 6: tk->ps = PS_DASHDOT; break; |
case 6: tk->ps = PS_DASHDOT; break; |
577 |
case 7: tk->ps = PS_DASH; break; |
case 7: tk->ps = PS_DASH; break; |
578 |
case 8: tk->ps = PS_DASHDOTDOT; break; |
case 8: tk->ps = PS_DASHDOTDOT; break; |
579 |
default: |
default: |
580 |
tk->ps = PS_SOLID; |
tk->ps = PS_SOLID; |
581 |
} |
} |
582 |
if (tk->Pen != NULL) DeleteObject(tk->Pen); |
if (tk->Pen != NULL) DeleteObject(tk->Pen); |
583 |
tk->Pen = CreatePen(tk->ps,1,tk->PenColor); |
tk->Pen = CreatePen(tk->ps,1,tk->PenColor); |
584 |
|
|
585 |
SelectObject(tk->MemDC, tk->OldMemPen); |
SelectObject(tk->MemDC, tk->OldMemPen); |
586 |
if (tk->MemPen != NULL) DeleteObject(tk->MemPen); |
if (tk->MemPen != NULL) DeleteObject(tk->MemPen); |
587 |
tk->MemPen = CreatePen(tk->ps,1,tk->MemPenColor); |
tk->MemPen = CreatePen(tk->ps,1,tk->MemPenColor); |
588 |
tk->OldMemPen = SelectObject(tk->MemDC,tk->MemPen); |
tk->OldMemPen = SelectObject(tk->MemDC,tk->MemPen); |
589 |
} |
} |
590 |
|
|
591 |
void TwoOpCode(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
void TwoOpCode(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
592 |
{ |
{ |
593 |
double Re; |
double Re; |
594 |
|
|
595 |
if (tk->OpCount == 2) |
if (tk->OpCount == 2) |
596 |
{ |
{ |
597 |
tk->OpCount--; |
tk->OpCount--; |
598 |
tk->Op2OC = b << 8; |
tk->Op2OC = b << 8; |
599 |
return; |
return; |
600 |
} |
} |
601 |
else if (tk->OpCount == 1) |
else if (tk->OpCount == 1) |
602 |
{ |
{ |
603 |
if (b <= 0x1a) return; |
if (b <= 0x1a) return; |
604 |
else if ((b>=0x1b) && (b<=0x1f)) |
else if ((b>=0x1b) && (b<=0x1f)) |
605 |
{ |
{ |
606 |
CommInsert1Byte(cv,b); |
CommInsert1Byte(cv,b); |
607 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
608 |
return; |
return; |
609 |
} |
} |
610 |
else { |
else { |
611 |
tk->OpCount--; |
tk->OpCount--; |
612 |
tk->Op2OC = tk->Op2OC + b; |
tk->Op2OC = tk->Op2OC + b; |
613 |
switch (tk->Op2OC) { |
switch (tk->Op2OC) { |
614 |
case IdMove: tk->PrmCountMax = 0; break; |
case IdMove: tk->PrmCountMax = 0; break; |
615 |
case IdDraw: tk->PrmCountMax = 0; break; |
case IdDraw: tk->PrmCountMax = 0; break; |
616 |
case IdDrawMarker: tk->PrmCountMax = 0; break; |
case IdDrawMarker: tk->PrmCountMax = 0; break; |
617 |
case IdGraphText: tk->PrmCountMax = 1; break; |
case IdGraphText: tk->PrmCountMax = 1; break; |
618 |
case IdSetDialogVisibility: tk->PrmCountMax = 1; break; |
case IdSetDialogVisibility: tk->PrmCountMax = 1; break; |
619 |
case IdSetGraphTextSize: tk->PrmCountMax = 3; break; |
case IdSetGraphTextSize: tk->PrmCountMax = 3; break; |
620 |
case IdSetWriteMode: tk->PrmCountMax = 1; break; |
case IdSetWriteMode: tk->PrmCountMax = 1; break; |
621 |
case IdSetLineIndex: tk->PrmCountMax = 1; break; |
case IdSetLineIndex: tk->PrmCountMax = 1; break; |
622 |
case IdSetMarkerType: tk->PrmCountMax = 1; break; |
case IdSetMarkerType: tk->PrmCountMax = 1; break; |
623 |
case IdSetCharPath: tk->PrmCountMax = 1; break; |
case IdSetCharPath: tk->PrmCountMax = 1; break; |
624 |
case IdSetPrecision: tk->PrmCountMax = 1; break; |
case IdSetPrecision: tk->PrmCountMax = 1; break; |
625 |
case IdSetRotation: tk->PrmCountMax = 2; break; |
case IdSetRotation: tk->PrmCountMax = 2; break; |
626 |
case IdSetTextIndex: tk->PrmCountMax = 1; break; |
case IdSetTextIndex: tk->PrmCountMax = 1; break; |
627 |
case IdSetLineStyle: tk->PrmCountMax = 1; break; |
case IdSetLineStyle: tk->PrmCountMax = 1; break; |
628 |
default: |
default: |
629 |
tk->PrmCountMax = 0; |
tk->PrmCountMax = 0; |
630 |
} |
} |
631 |
memset(tk->Prm2OC,0,sizeof(tk->Prm2OC)); |
memset(tk->Prm2OC,0,sizeof(tk->Prm2OC)); |
632 |
tk->PrmCount = 0; |
tk->PrmCount = 0; |
633 |
if (tk->PrmCountMax > 0) return; |
if (tk->PrmCountMax > 0) return; |
634 |
} |
} |
635 |
} |
} |
636 |
|
|
637 |
if (tk->PrmCount < tk->PrmCountMax) |
if (tk->PrmCount < tk->PrmCountMax) |
638 |
{ |
{ |
639 |
if (b <= 0x1a) return; |
if (b <= 0x1a) return; |
640 |
else if ((b>=0x1b) && (b<=0x1f)) |
else if ((b>=0x1b) && (b<=0x1f)) |
641 |
{ |
{ |
642 |
CommInsert1Byte(cv,b); |
CommInsert1Byte(cv,b); |
643 |
tk->PrmCount = tk->PrmCountMax; |
tk->PrmCount = tk->PrmCountMax; |
644 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
645 |
} |
} |
646 |
else if ((b>=0x20) && (b<=0x2f)) |
else if ((b>=0x20) && (b<=0x2f)) |
647 |
{ /* LoI (minus) */ |
{ /* LoI (minus) */ |
648 |
tk->Prm2OC[tk->PrmCount] = |
tk->Prm2OC[tk->PrmCount] = |
649 |
- (tk->Prm2OC[tk->PrmCount]*16 + b - 0x20); |
- (tk->Prm2OC[tk->PrmCount]*16 + b - 0x20); |
650 |
tk->PrmCount++; |
tk->PrmCount++; |
651 |
} |
} |
652 |
else if ((b>=0x30) && (b<=0x3f)) |
else if ((b>=0x30) && (b<=0x3f)) |
653 |
{ /* LoI (plus) */ |
{ /* LoI (plus) */ |
654 |
tk->Prm2OC[tk->PrmCount] = |
tk->Prm2OC[tk->PrmCount] = |
655 |
tk->Prm2OC[tk->PrmCount]*16 + b - 0x30; |
tk->Prm2OC[tk->PrmCount]*16 + b - 0x30; |
656 |
tk->PrmCount++; |
tk->PrmCount++; |
657 |
} |
} |
658 |
else if ((b>=0x40) && (b<=0x7f)) |
else if ((b>=0x40) && (b<=0x7f)) |
659 |
tk->Prm2OC[tk->PrmCount] = |
tk->Prm2OC[tk->PrmCount] = |
660 |
tk->Prm2OC[tk->PrmCount]*64 + b - 0x40; |
tk->Prm2OC[tk->PrmCount]*64 + b - 0x40; |
661 |
} |
} |
662 |
|
|
663 |
if (tk->PrmCount < tk->PrmCountMax) return; |
if (tk->PrmCount < tk->PrmCountMax) return; |
664 |
|
|
665 |
switch (tk->Op2OC) { |
switch (tk->Op2OC) { |
666 |
case IdMove: |
case IdMove: |
667 |
tk->LoXReceive = FALSE; |
tk->LoXReceive = FALSE; |
668 |
tk->LoCount = 0; |
tk->LoCount = 0; |
669 |
tk->Drawing = TRUE; |
tk->Drawing = TRUE; |
670 |
tk->MoveFlag = TRUE; |
tk->MoveFlag = TRUE; |
671 |
tk->MarkerFlag = FALSE; |
tk->MarkerFlag = FALSE; |
672 |
break; |
break; |
673 |
case IdDraw: |
case IdDraw: |
674 |
tk->LoXReceive = FALSE; |
tk->LoXReceive = FALSE; |
675 |
tk->LoCount = 0; |
tk->LoCount = 0; |
676 |
tk->Drawing = TRUE; |
tk->Drawing = TRUE; |
677 |
tk->MoveFlag = FALSE; |
tk->MoveFlag = FALSE; |
678 |
tk->MarkerFlag = FALSE; |
tk->MarkerFlag = FALSE; |
679 |
break; |
break; |
680 |
case IdDrawMarker: |
case IdDrawMarker: |
681 |
tk->LoXReceive = FALSE; |
tk->LoXReceive = FALSE; |
682 |
tk->LoCount = 0; |
tk->LoCount = 0; |
683 |
tk->Drawing = TRUE; |
tk->Drawing = TRUE; |
684 |
tk->MoveFlag = TRUE; |
tk->MoveFlag = TRUE; |
685 |
tk->MarkerFlag = TRUE; |
tk->MarkerFlag = TRUE; |
686 |
break; |
break; |
687 |
case IdGraphText: |
case IdGraphText: |
688 |
tk->GTCount = 0; |
tk->GTCount = 0; |
689 |
tk->GTLen = tk->Prm2OC[0]; |
tk->GTLen = tk->Prm2OC[0]; |
690 |
if (tk->GTLen>0) |
if (tk->GTLen>0) |
691 |
tk->ParseMode = ModeGT; |
tk->ParseMode = ModeGT; |
692 |
else |
else |
693 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
694 |
return; |
return; |
695 |
case IdSetDialogVisibility: break; |
case IdSetDialogVisibility: break; |
696 |
case IdSetGraphTextSize: |
case IdSetGraphTextSize: |
697 |
tk->GTWidth = tk->Prm2OC[0]; |
tk->GTWidth = tk->Prm2OC[0]; |
698 |
tk->GTHeight = tk->Prm2OC[1]; |
tk->GTHeight = tk->Prm2OC[1]; |
699 |
tk->GTSpacing = tk->Prm2OC[2]; |
tk->GTSpacing = tk->Prm2OC[2]; |
700 |
if ((tk->GTWidth==0) && |
if ((tk->GTWidth==0) && |
701 |
(tk->GTHeight==0) && |
(tk->GTHeight==0) && |
702 |
(tk->GTSpacing==0)) |
(tk->GTSpacing==0)) |
703 |
{ |
{ |
704 |
tk->GTWidth=39; |
tk->GTWidth=39; |
705 |
tk->GTHeight=59; |
tk->GTHeight=59; |
706 |
tk->GTSpacing=12; |
tk->GTSpacing=12; |
707 |
} |
} |
708 |
if (tk->GTWidth<=0) tk->GTWidth=39; |
if (tk->GTWidth<=0) tk->GTWidth=39; |
709 |
if (tk->GTHeight<=0) tk->GTWidth=59; |
if (tk->GTHeight<=0) tk->GTWidth=59; |
710 |
if (tk->GTSpacing<=0) tk->GTSpacing=0; |
if (tk->GTSpacing<=0) tk->GTSpacing=0; |
711 |
break; |
break; |
712 |
case IdSetWriteMode: break; |
case IdSetWriteMode: break; |
713 |
case IdSetLineIndex: |
case IdSetLineIndex: |
714 |
SetLineIndex(tk,ts,tk->Prm2OC[0]); |
SetLineIndex(tk,ts,tk->Prm2OC[0]); |
715 |
break; |
break; |
716 |
case IdSetMarkerType: |
case IdSetMarkerType: |
717 |
tk->MarkerType = tk->Prm2OC[0]; |
tk->MarkerType = tk->Prm2OC[0]; |
718 |
break; |
break; |
719 |
case IdSetCharPath: break; |
case IdSetCharPath: break; |
720 |
case IdSetPrecision: break; |
case IdSetPrecision: break; |
721 |
case IdSetRotation: |
case IdSetRotation: |
722 |
Re = (double)tk->Prm2OC[0] * |
Re = (double)tk->Prm2OC[0] * |
723 |
pow(2.0,(double)tk->Prm2OC[1]); |
pow(2.0,(double)tk->Prm2OC[1]); |
724 |
Re = fmod(Re,360.0); |
Re = fmod(Re,360.0); |
725 |
if (Re<0) Re = Re + 360.0; |
if (Re<0) Re = Re + 360.0; |
726 |
if (Re<45.0) |
if (Re<45.0) |
727 |
tk->GTAngle=0; |
tk->GTAngle=0; |
728 |
else if (Re<135.0) |
else if (Re<135.0) |
729 |
tk->GTAngle = 1; |
tk->GTAngle = 1; |
730 |
else if (Re<315.0) |
else if (Re<315.0) |
731 |
tk->GTAngle = 2; |
tk->GTAngle = 2; |
732 |
else |
else |
733 |
tk->GTAngle = 3; |
tk->GTAngle = 3; |
734 |
break; |
break; |
735 |
case IdSetTextIndex: |
case IdSetTextIndex: |
736 |
SetTextIndex(tk,ts,tk->Prm2OC[0]); |
SetTextIndex(tk,ts,tk->Prm2OC[0]); |
737 |
break; |
break; |
738 |
case IdSetLineStyle: |
case IdSetLineStyle: |
739 |
SetLineStyle(tk,(BYTE)(tk->Prm2OC[0])); |
SetLineStyle(tk,(BYTE)(tk->Prm2OC[0])); |
740 |
break; |
break; |
741 |
} |
} |
742 |
|
|
743 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
744 |
} |
} |
745 |
|
|
746 |
void EscPage(PTEKVar tk) /* Clear Screen and enter ALPHAMODE */ |
void EscPage(PTEKVar tk) /* Clear Screen and enter ALPHAMODE */ |
747 |
{ |
{ |
748 |
RECT R; |
RECT R; |
749 |
|
|
750 |
SetLineStyle(tk,0); |
SetLineStyle(tk,0); |
751 |
GetClientRect(tk->HWin,&R); |
GetClientRect(tk->HWin,&R); |
752 |
FillRect(tk->MemDC,&R,tk->MemBackGround); |
FillRect(tk->MemDC,&R,tk->MemBackGround); |
753 |
InvalidateRect(tk->HWin,&R,FALSE); |
InvalidateRect(tk->HWin,&R,FALSE); |
754 |
UpdateWindow(tk->HWin); |
UpdateWindow(tk->HWin); |
755 |
EnterAlphaMode(tk); |
EnterAlphaMode(tk); |
756 |
tk->CaretX = 0; |
tk->CaretX = 0; |
757 |
tk->CaretOffset = 0; |
tk->CaretOffset = 0; |
758 |
tk->CaretY = 0; |
tk->CaretY = 0; |
759 |
} |
} |
760 |
|
|
761 |
void TEKEscape(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
void TEKEscape(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
762 |
{ |
{ |
763 |
switch (b) { |
switch (b) { |
764 |
case 0x00: return; |
case 0x00: return; |
765 |
case 0x0a: return; |
case 0x0a: return; |
766 |
case 0x0c: EscPage(tk); break; |
case 0x0c: EscPage(tk); break; |
767 |
case 0x0d: return; |
case 0x0d: return; |
768 |
case 0x1a: |
case 0x1a: |
769 |
tk->GIN = TRUE; |
tk->GIN = TRUE; |
770 |
/* Capture mouse */ |
/* Capture mouse */ |
771 |
SetCapture(tk->HWin); |
SetCapture(tk->HWin); |
772 |
EnterAlphaMode(tk); |
EnterAlphaMode(tk); |
773 |
break; |
break; |
774 |
case 0x1b: return; |
case 0x1b: return; |
775 |
case 0x1c: |
case 0x1c: |
776 |
case 0x1d: |
case 0x1d: |
777 |
case 0x1e: |
case 0x1e: |
778 |
case 0x1f: |
case 0x1f: |
779 |
CommInsert1Byte(cv,b); break; |
CommInsert1Byte(cv,b); break; |
780 |
case '#': |
case '#': |
781 |
tk->ParseMode = ModeSelectCode; |
tk->ParseMode = ModeSelectCode; |
782 |
tk->SelectCodeFlag = b; |
tk->SelectCodeFlag = b; |
783 |
return; |
return; |
784 |
case '%': |
case '%': |
785 |
tk->ParseMode = ModeSelectCode; |
tk->ParseMode = ModeSelectCode; |
786 |
tk->SelectCodeFlag = b; |
tk->SelectCodeFlag = b; |
787 |
return; |
return; |
788 |
case '2': |
case '2': |
789 |
if (ts->AutoWinSwitch > 0) |
if (ts->AutoWinSwitch > 0) |
790 |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
tk->ChangeEmu = IdVT; /* Enter VT Mode */ |
791 |
break; |
break; |
792 |
case '[': |
case '[': |
793 |
tk->CSCount = 0; |
tk->CSCount = 0; |
794 |
tk->ParseMode = ModeCS; |
tk->ParseMode = ModeCS; |
795 |
return; |
return; |
796 |
case 0x7f: return; |
case 0x7f: return; |
797 |
default: |
default: |
798 |
if ((b>='8') && (b<=';')) |
if ((b>='8') && (b<=';')) |
799 |
{ |
{ |
800 |
if (tk->TextSize != b-0x38) |
if (tk->TextSize != b-0x38) |
801 |
{ |
{ |
802 |
tk->TextSize = b-0x38; |
tk->TextSize = b-0x38; |
803 |
ChangeTextSize(tk,ts); |
ChangeTextSize(tk,ts); |
804 |
} |
} |
805 |
break; |
break; |
806 |
} |
} |
807 |
else if ((b>='I') && (b<='Z')) |
else if ((b>='I') && (b<='Z')) |
808 |
{ |
{ |
809 |
tk->ParseMode = Mode2OC; |
tk->ParseMode = Mode2OC; |
810 |
tk->OpCount = 2; |
tk->OpCount = 2; |
811 |
TwoOpCode(tk,ts,cv,b); |
TwoOpCode(tk,ts,cv,b); |
812 |
return; |
return; |
813 |
} |
} |
814 |
else if ((b>=0x60) && (b<=0x6f)) |
else if ((b>=0x60) && (b<=0x6f)) |
815 |
{ |
{ |
816 |
SetLineStyle(tk,(BYTE)((b-0x60) & 7)); |
SetLineStyle(tk,(BYTE)((b-0x60) & 7)); |
817 |
break; |
break; |
818 |
} |
} |
819 |
} |
} |
820 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
821 |
} |
} |
822 |
|
|
823 |
void CSSetAttr(PTEKVar tk, PTTSet ts) |
void CSSetAttr(PTEKVar tk, PTTSet ts) |
824 |
{ |
{ |
825 |
int i, P; |
int i, P; |
826 |
|
|
827 |
for (i=1 ; i<=tk->NParam ; i++) |
for (i=1 ; i<=tk->NParam ; i++) |
828 |
{ |
{ |
829 |
P = tk->Param[i]; |
P = tk->Param[i]; |
830 |
if (P<0) P = 0; |
if (P<0) P = 0; |
831 |
switch (P) { |
switch (P) { |
832 |
/* Clear */ |
/* Clear */ |
833 |
case 0: |
case 0: |
834 |
SetColorIndex(tk,ts,1); |
SetColorIndex(tk,ts,1); |
835 |
break; |
break; |
836 |
/* Bold */ |
/* Bold */ |
837 |
case 1: |
case 1: |
838 |
break; |
break; |
839 |
/* Under line */ |
/* Under line */ |
840 |
case 4: |
case 4: |
841 |
break; |
break; |
842 |
/* Blink */ |
/* Blink */ |
843 |
case 5: |
case 5: |
844 |
break; |
break; |
845 |
/* Reverse */ |
/* Reverse */ |
846 |
case 7: |
case 7: |
847 |
break; |
break; |
848 |
/* Bold off */ |
/* Bold off */ |
849 |
case 22: |
case 22: |
850 |
break; |
break; |
851 |
/* Under line off */ |
/* Under line off */ |
852 |
case 24: |
case 24: |
853 |
break; |
break; |
854 |
/* Blink off */ |
/* Blink off */ |
855 |
case 25: |
case 25: |
856 |
break; |
break; |
857 |
/* Reverse off */ |
/* Reverse off */ |
858 |
case 27: |
case 27: |
859 |
break; |
break; |
860 |
// colors for text & graphics |
// colors for text & graphics |
861 |
case 30: SetColorIndex(tk,ts,0); break; |
case 30: SetColorIndex(tk,ts,0); break; |
862 |
case 31: SetColorIndex(tk,ts,2); break; |
case 31: SetColorIndex(tk,ts,2); break; |
863 |
case 32: SetColorIndex(tk,ts,3); break; |
case 32: SetColorIndex(tk,ts,3); break; |
864 |
case 33: SetColorIndex(tk,ts,7); break; |
case 33: SetColorIndex(tk,ts,7); break; |
865 |
case 34: SetColorIndex(tk,ts,4); break; |
case 34: SetColorIndex(tk,ts,4); break; |
866 |
case 35: SetColorIndex(tk,ts,6); break; |
case 35: SetColorIndex(tk,ts,6); break; |
867 |
case 36: SetColorIndex(tk,ts,5); break; |
case 36: SetColorIndex(tk,ts,5); break; |
868 |
case 37: SetColorIndex(tk,ts,1); break; |
case 37: SetColorIndex(tk,ts,1); break; |
869 |
case 39: SetColorIndex(tk,ts,1); break; |
case 39: SetColorIndex(tk,ts,1); break; |
870 |
} |
} |
871 |
} |
} |
872 |
} |
} |
873 |
|
|
874 |
void ParseCS(PTEKVar tk, PTTSet ts, PComVar cv) |
void ParseCS(PTEKVar tk, PTTSet ts, PComVar cv) |
875 |
{ |
{ |
876 |
#define IntCharMax 5 |
#define IntCharMax 5 |
877 |
int i = 0; |
int i = 0; |
878 |
BYTE IntChar[IntCharMax+1]; |
BYTE IntChar[IntCharMax+1]; |
879 |
int ICount = 0; |
int ICount = 0; |
880 |
BOOL FirstPrm = TRUE; |
BOOL FirstPrm = TRUE; |
881 |
BYTE Prv = 0; |
BYTE Prv = 0; |
882 |
BOOL MoveToVT; |
BOOL MoveToVT; |
883 |
BYTE b; |
BYTE b; |
884 |
|
|
885 |
tk->NParam = 1; |
tk->NParam = 1; |
886 |
tk->Param[1] = -1; |
tk->Param[1] = -1; |
887 |
do { |
do { |
888 |
b = tk->CSBuff[i++]; |
b = tk->CSBuff[i++]; |
889 |
if ((b>=0x20) && (b<=0x2F)) |
if ((b>=0x20) && (b<=0x2F)) |
890 |
{ |
{ |
891 |
if (ICount<IntCharMax) ICount++; |
if (ICount<IntCharMax) ICount++; |
892 |
IntChar[ICount] = b; |
IntChar[ICount] = b; |
893 |
} |
} |
894 |
else if ((b>=0x30) && (b<=0x39)) |
else if ((b>=0x30) && (b<=0x39)) |
895 |
{ |
{ |
896 |
if (tk->Param[tk->NParam] < 0) |
if (tk->Param[tk->NParam] < 0) |
897 |
tk->Param[tk->NParam] = 0; |
tk->Param[tk->NParam] = 0; |
898 |
if (tk->Param[tk->NParam]<1000) |
if (tk->Param[tk->NParam]<1000) |
899 |
tk->Param[tk->NParam] = tk->Param[tk->NParam]*10 + b - 0x30; |
tk->Param[tk->NParam] = tk->Param[tk->NParam]*10 + b - 0x30; |
900 |
} |
} |
901 |
else if (b==0x3B) |
else if (b==0x3B) |
902 |
{ |
{ |
903 |
if (tk->NParam < NParamMax) |
if (tk->NParam < NParamMax) |
904 |
{ |
{ |
905 |
tk->NParam++; |
tk->NParam++; |
906 |
tk->Param[tk->NParam] = -1; |
tk->Param[tk->NParam] = -1; |
907 |
} |
} |
908 |
} |
} |
909 |
else if ((b>=0x3C) && (b<=0x3F)) |
else if ((b>=0x3C) && (b<=0x3F)) |
910 |
{ |
{ |
911 |
if (FirstPrm) Prv = b; |
if (FirstPrm) Prv = b; |
912 |
} |
} |
913 |
FirstPrm = FALSE; |
FirstPrm = FALSE; |
914 |
} while ((i<tk->CSCount) && |
} while ((i<tk->CSCount) && |
915 |
! ((b>=0x40) && (b<=0x7E))); |
! ((b>=0x40) && (b<=0x7E))); |
916 |
|
|
917 |
MoveToVT = FALSE; |
MoveToVT = FALSE; |
918 |
if ((b>=0x40) && (b<=0x7E)) |
if ((b>=0x40) && (b<=0x7E)) |
919 |
{ |
{ |
920 |
switch (ICount) { |
switch (ICount) { |
921 |
/* no intermediate char */ |
/* no intermediate char */ |
922 |
case 0: |
case 0: |
923 |
switch (Prv) { |
switch (Prv) { |
924 |
/* no private parameters */ |
/* no private parameters */ |
925 |
case 0: |
case 0: |
926 |
switch (b) { |
switch (b) { |
927 |
case 'm': CSSetAttr(tk,ts); break; |
case 'm': CSSetAttr(tk,ts); break; |
928 |
default: MoveToVT = TRUE; |
default: MoveToVT = TRUE; |
929 |
} |
} |
930 |
break; |
break; |
931 |
case '?': |
case '?': |
932 |
// ignore ^[?38h (select TEK mode) |
// ignore ^[?38h (select TEK mode) |
933 |
if ((b!='h') || (tk->Param[1]!=38)) |
if ((b!='h') || (tk->Param[1]!=38)) |
934 |
MoveToVT = TRUE; |
MoveToVT = TRUE; |
935 |
break; |
break; |
936 |
default: |
default: |
937 |
MoveToVT = TRUE; |
MoveToVT = TRUE; |
938 |
} |
} |
939 |
break; |
break; |
940 |
default: |
default: |
941 |
MoveToVT = TRUE; |
MoveToVT = TRUE; |
942 |
} /* end of switch (Icount) */ |
} /* end of switch (Icount) */ |
943 |
} |
} |
944 |
else |
else |
945 |
MoveToVT = TRUE; |
MoveToVT = TRUE; |
946 |
|
|
947 |
if ((ts->AutoWinSwitch>0) && MoveToVT) |
if ((ts->AutoWinSwitch>0) && MoveToVT) |
948 |
{ |
{ |
949 |
for (i=tk->CSCount-1 ; i>=0; i--) |
for (i=tk->CSCount-1 ; i>=0; i--) |
950 |
CommInsert1Byte(cv,tk->CSBuff[i]); |
CommInsert1Byte(cv,tk->CSBuff[i]); |
951 |
CommInsert1Byte(cv,0x5B); |
CommInsert1Byte(cv,0x5B); |
952 |
CommInsert1Byte(cv,0x1B); |
CommInsert1Byte(cv,0x1B); |
953 |
tk->ChangeEmu = IdVT; |
tk->ChangeEmu = IdVT; |
954 |
} |
} |
955 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
956 |
} |
} |
957 |
|
|
958 |
void ControlSequence(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
void ControlSequence(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
959 |
{ |
{ |
960 |
switch (b) { |
switch (b) { |
961 |
case 0x1B: |
case 0x1B: |
962 |
case 0x1C: |
case 0x1C: |
963 |
case 0x1D: |
case 0x1D: |
964 |
case 0x1E: |
case 0x1E: |
965 |
case 0x1F: |
case 0x1F: |
966 |
CommInsert1Byte(cv,b); break; |
CommInsert1Byte(cv,b); break; |
967 |
default: |
default: |
968 |
if (tk->CSCount < sizeof(tk->CSBuff)) |
if (tk->CSCount < sizeof(tk->CSBuff)) |
969 |
{ |
{ |
970 |
tk->CSBuff[tk->CSCount++] = b; |
tk->CSBuff[tk->CSCount++] = b; |
971 |
if ((b>=0x40) && (b<=0x7E)) |
if ((b>=0x40) && (b<=0x7E)) |
972 |
ParseCS(tk,ts,cv); |
ParseCS(tk,ts,cv); |
973 |
return; |
return; |
974 |
} |
} |
975 |
} |
} |
976 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
977 |
} |
} |
978 |
|
|
979 |
void GraphText(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
void GraphText(PTEKVar tk, PTTSet ts, PComVar cv, BYTE b) |
980 |
{ |
{ |
981 |
int i, Dx[80]; |
int i, Dx[80]; |
982 |
HFONT TempFont, TempOld; |
HFONT TempFont, TempOld; |
983 |
LOGFONT lf; |
LOGFONT lf; |
984 |
RECT R; |
RECT R; |
985 |
int W, H; |
int W, H; |
986 |
TEXTMETRIC Metrics; |
TEXTMETRIC Metrics; |
987 |
|
|
988 |
switch (b) { |
switch (b) { |
989 |
case 0x1B: |
case 0x1B: |
990 |
case 0x1C: |
case 0x1C: |
991 |
case 0x1D: |
case 0x1D: |
992 |
case 0x1E: |
case 0x1E: |
993 |
case 0x1F: |
case 0x1F: |
994 |
CommInsert1Byte(cv,b); break; |
CommInsert1Byte(cv,b); break; |
995 |
default: |
default: |
996 |
tk->GTBuff[tk->GTCount++] = b; |
tk->GTBuff[tk->GTCount++] = b; |
997 |
if ((tk->GTCount>=sizeof(tk->GTBuff)) || |
if ((tk->GTCount>=sizeof(tk->GTBuff)) || |
998 |
(tk->GTCount>=tk->GTLen)) |
(tk->GTCount>=tk->GTLen)) |
999 |
{ |
{ |
1000 |
memcpy(&lf,&tk->TEKlf,sizeof(lf)); |
memcpy(&lf,&tk->TEKlf,sizeof(lf)); |
1001 |
switch (tk->GTAngle) { |
switch (tk->GTAngle) { |
1002 |
case 0: lf.lfEscapement = 0; break; |
case 0: lf.lfEscapement = 0; break; |
1003 |
case 1: lf.lfEscapement = 900; break; |
case 1: lf.lfEscapement = 900; break; |
1004 |
case 2: lf.lfEscapement = 1800; break; |
case 2: lf.lfEscapement = 1800; break; |
1005 |
case 3: lf.lfEscapement = 2700; break; |
case 3: lf.lfEscapement = 2700; break; |
1006 |
} |
} |
1007 |
W = (int)((float)tk->GTWidth / (float)ViewSizeX * |
W = (int)((float)tk->GTWidth / (float)ViewSizeX * |
1008 |
(float)tk->ScreenWidth); |
(float)tk->ScreenWidth); |
1009 |
H = (int)((float)tk->GTHeight / (float)ViewSizeY * |
H = (int)((float)tk->GTHeight / (float)ViewSizeY * |
1010 |
(float)tk->ScreenHeight); |
(float)tk->ScreenHeight); |
1011 |
lf.lfWidth = W; |
lf.lfWidth = W; |
1012 |
lf.lfHeight = H; |
lf.lfHeight = H; |
1013 |
TempFont = CreateFontIndirect(&lf); |
TempFont = CreateFontIndirect(&lf); |
1014 |
TempOld = SelectObject(tk->MemDC,TempFont); |
TempOld = SelectObject(tk->MemDC,TempFont); |
1015 |
W = (int)((float)(tk->GTWidth + tk->GTSpacing) / |
W = (int)((float)(tk->GTWidth + tk->GTSpacing) / |
1016 |
(float)ViewSizeX * |
(float)ViewSizeX * |
1017 |
(float)tk->ScreenWidth); |
(float)tk->ScreenWidth); |
1018 |
GetTextMetrics(tk->MemDC, &Metrics); |
GetTextMetrics(tk->MemDC, &Metrics); |
1019 |
if (W < Metrics.tmAveCharWidth) |
if (W < Metrics.tmAveCharWidth) |
1020 |
W = Metrics.tmAveCharWidth; |
W = Metrics.tmAveCharWidth; |
1021 |
H = Metrics.tmHeight; |
H = Metrics.tmHeight; |
1022 |
for (i=0; i <= tk->GTLen; i++) |
for (i=0; i <= tk->GTLen; i++) |
1023 |
Dx[i] = W; |
Dx[i] = W; |
1024 |
SetTextAlign(tk->MemDC,TA_LEFT | TA_BASELINE | TA_NOUPDATECP); |
SetTextAlign(tk->MemDC,TA_LEFT | TA_BASELINE | TA_NOUPDATECP); |
1025 |
ExtTextOut(tk->MemDC,tk->CaretX,tk->CaretY,0,NULL,tk->GTBuff,tk->GTLen,&Dx[0]); |
ExtTextOut(tk->MemDC,tk->CaretX,tk->CaretY,0,NULL,tk->GTBuff,tk->GTLen,&Dx[0]); |
1026 |
SetTextAlign(tk->MemDC,TA_LEFT | TA_BOTTOM | TA_NOUPDATECP); |
SetTextAlign(tk->MemDC,TA_LEFT | TA_BOTTOM | TA_NOUPDATECP); |
1027 |
SelectObject(tk->MemDC,TempOld); |
SelectObject(tk->MemDC,TempOld); |
1028 |
DeleteObject(TempFont); |
DeleteObject(TempFont); |
1029 |
switch (tk->GTAngle) { |
switch (tk->GTAngle) { |
1030 |
case 0: |
case 0: |
1031 |
R.left = tk->CaretX; |
R.left = tk->CaretX; |
1032 |
R.top = tk->CaretY - H; |
R.top = tk->CaretY - H; |
1033 |
R.right = tk->CaretX + tk->GTLen*W; |
R.right = tk->CaretX + tk->GTLen*W; |
1034 |
R.bottom = tk->CaretY + H; |
R.bottom = tk->CaretY + H; |
1035 |
tk->CaretX = R.right; |
tk->CaretX = R.right; |
1036 |
break; |
break; |
1037 |
case 1: |
case 1: |
1038 |
R.left = tk->CaretX - H; |
R.left = tk->CaretX - H; |
1039 |
R.top = tk->CaretY - tk->GTLen*W; |
R.top = tk->CaretY - tk->GTLen*W; |
1040 |
R.right = tk->CaretX + H; |
R.right = tk->CaretX + H; |
1041 |
R.bottom = tk->CaretY; |
R.bottom = tk->CaretY; |
1042 |
tk->CaretY = R.top; |
tk->CaretY = R.top; |
1043 |
break; |
break; |
1044 |
case 2: |
case 2: |
1045 |
R.left = tk->CaretX - tk->GTLen*W; |
R.left = tk->CaretX - tk->GTLen*W; |
1046 |
R.top = tk->CaretY - H; |
R.top = tk->CaretY - H; |
1047 |
R.right = tk->CaretX; |
R.right = tk->CaretX; |
1048 |
R.bottom = tk->CaretY + H; |
R.bottom = tk->CaretY + H; |
1049 |
tk->CaretX = R.left; |
tk->CaretX = R.left; |
1050 |
break; |
break; |
1051 |
case 3: |
case 3: |
1052 |
R.left = tk->CaretX - H; |
R.left = tk->CaretX - H; |
1053 |
R.top = tk->CaretY; |
R.top = tk->CaretY; |
1054 |
R.right = tk->CaretX + H; |
R.right = tk->CaretX + H; |
1055 |
R.bottom = tk->CaretY + tk->GTLen*W; |
R.bottom = tk->CaretY + tk->GTLen*W; |
1056 |
tk->CaretY = R.bottom; |
tk->CaretY = R.bottom; |
1057 |
break; |
break; |
1058 |
} |
} |
1059 |
InvalidateRect(tk->HWin,&R,FALSE); |
InvalidateRect(tk->HWin,&R,FALSE); |
1060 |
break; |
break; |
1061 |
} |
} |
1062 |
return; |
return; |
1063 |
} |
} |
1064 |
tk->ParseMode = ModeFirst; |
tk->ParseMode = ModeFirst; |
1065 |
} |
} |