Rev 775 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 775 | Rev 1007 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | unit LRLRoutines; |
1 | {$codepage utf8} |
2 | - | ||
3 | {$mode objfpc} |
2 | {$mode objfpc} |
4 | {$asmmode intel} |
3 | {$asmmode intel} |
Line -... | Line 4... | ||
- | 4 | ||
- | 5 | unit LRLRoutines; |
|
Line 5... | Line 6... | ||
5 | 6 | ||
Line 6... | Line 7... | ||
6 | 7 | ||
Line 84... | Line 85... | ||
84 | KEY_O = $1800; |
85 | KEY_O = $1800; |
85 | KEY_P = $1900; |
86 | KEY_P = $1900; |
86 | KEY_LBRACKET = $1A00; |
87 | KEY_LBRACKET = $1A00; |
87 | KEY_RBRACKET = $1B00; |
88 | KEY_RBRACKET = $1B00; |
88 | KEY_ENTER = $1C00; |
89 | KEY_ENTER = $1C00; |
- | 90 | KEY_CTRL = $1D00; |
|
Line 89... | Line 91... | ||
89 | 91 | ||
90 | KEY_A = $1E00; |
92 | KEY_A = $1E00; |
91 | KEY_S = $1F00; |
93 | KEY_S = $1F00; |
92 | KEY_D = $2000; |
94 | KEY_D = $2000; |
Line 198... | Line 200... | ||
198 | CurrentScreenMode: Integer = 0; |
200 | CurrentScreenMode: Integer = 0; |
Line 199... | Line 201... | ||
199 | 201 | ||
200 | LastKeyEvent: Word = $FFFF; |
202 | LastKeyEvent: Word = $FFFF; |
201 | LastKeyUp : Boolean = True; |
203 | LastKeyUp : Boolean = True; |
202 | LastKeyDown: Boolean = False; |
204 | LastKeyDown: Boolean = False; |
203 | AltDown : Boolean = False; |
205 | CtrlDown : Boolean = False; |
204 | ShiftDown : Boolean = False; |
206 | ShiftDown : Boolean = False; |
205 | LShiftDown : Boolean = False; |
207 | LShiftDown : Boolean = False; |
206 | RShiftDown : Boolean = False; |
208 | RShiftDown : Boolean = False; |
Line 270... | Line 272... | ||
270 | C: PRGBColor; |
272 | C: PRGBColor; |
Line 271... | Line 273... | ||
271 | 273 | ||
272 | begin |
274 | begin |
273 | if (ScreenWidth = BUFFER_WIDTH) and (ScreenHeight = BUFFER_HEIGHT) then |
275 | if (ScreenWidth = BUFFER_WIDTH) and (ScreenHeight = BUFFER_HEIGHT) then |
274 | begin |
276 | begin |
275 | {¯¥à¥®á ®¤¨ ¢ ®¤¨} |
277 | {перенос один в один} |
276 | B := @ScreenPalBuffer; |
278 | B := @ScreenPalBuffer; |
277 | C := ScreenRGBBuffer; |
279 | C := ScreenRGBBuffer; |
278 | for I := 0 to BUFFER_HEIGHT - 1 do |
280 | for I := 0 to BUFFER_HEIGHT - 1 do |
279 | for J := 0 to BUFFER_WIDTH - 1 do |
281 | for J := 0 to BUFFER_WIDTH - 1 do |
Line 282... | Line 284... | ||
282 | Inc(B); |
284 | Inc(B); |
283 | Inc(C); |
285 | Inc(C); |
284 | end; |
286 | end; |
285 | end else |
287 | end else |
286 | begin |
288 | begin |
287 | {¬ áèâ ¡¨à®¢ ¨¥} |
289 | {масштабирование} |
288 | XStep := (BUFFER_WIDTH shl 16) div ScreenWidth; |
290 | XStep := (BUFFER_WIDTH shl 16) div ScreenWidth; |
289 | YStep := (BUFFER_HEIGHT shl 16) div ScreenHeight; |
291 | YStep := (BUFFER_HEIGHT shl 16) div ScreenHeight; |
290 | Horizontal; |
292 | Horizontal; |
291 | Vertical; |
293 | Vertical; |
292 | end; |
294 | end; |
Line 388... | Line 390... | ||
388 | X, I, J, K, C: Word; |
390 | X, I, J, K, C: Word; |
389 | begin |
391 | begin |
390 | Height := PWord(@FontData + 2)^; |
392 | Height := PWord(@FontData + 2)^; |
391 | Table := PWord(@FontData + 4); |
393 | Table := PWord(@FontData + 4); |
Line 392... | Line 394... | ||
392 | 394 | ||
393 | { à áç¥â ¤«¨ë áâப¨ } |
395 | { расчет длины строки } |
394 | Width := 0; |
396 | Width := 0; |
395 | for I := 1 to Length(Source) do |
397 | for I := 1 to Length(Source) do |
396 | begin |
398 | begin |
397 | P := @Table[Ord(Source[I])]; |
399 | P := @Table[Ord(Source[I])]; |
398 | Inc(Width, PWord(P + PWord(P)^)^); |
400 | Inc(Width, PWord(P + PWord(P)^)^); |
Line 399... | Line 401... | ||
399 | end; |
401 | end; |
400 | 402 | ||
Line 401... | Line 403... | ||
401 | PWord(@Buffer)^ := Width; |
403 | PWord(@Buffer)^ := Width; |
402 | PWord(@Buffer + 2)^ := Height; |
404 | PWord(@Buffer + 2)^ := Height; |
403 | 405 | ||
404 | { ¢ë¢®¤ áâப¨ } |
406 | { вывод строки } |
405 | X := 0; |
407 | X := 0; |
406 | for I := 1 to Length(Source) do |
408 | for I := 1 to Length(Source) do |
Line 532... | Line 534... | ||
532 | 534 | ||
533 | LastKeyDown := Result < KEY_UP_BASE; |
535 | LastKeyDown := Result < KEY_UP_BASE; |
534 | LastKeyUp := not LastKeyDown; |
536 | LastKeyUp := not LastKeyDown; |
Line 535... | Line 537... | ||
535 | if LastKeyUp then Dec(Result, KEY_UP_BASE); |
537 | if LastKeyUp then Dec(Result, KEY_UP_BASE); |
536 | 538 | ||
537 | if Result = KEY_ALT then |
539 | if Result = KEY_CTRL then |
538 | begin |
540 | begin |
539 | AltDown := LastKeyDown; |
541 | CtrlDown := LastKeyDown; |
Line 540... | Line 542... | ||
540 | Result := $FFFF; |
542 | Result := $FFFF; |
541 | end else |
543 | end else |
Line 552... | Line 554... | ||
552 | RShiftDown := LastKeyDown; |
554 | RShiftDown := LastKeyDown; |
553 | ShiftDown := LShiftDown or RShiftDown; |
555 | ShiftDown := LShiftDown or RShiftDown; |
554 | Result := $FFFF; |
556 | Result := $FFFF; |
555 | end else |
557 | end else |
Line 556... | Line 558... | ||
556 | 558 | ||
557 | if AltDown then |
559 | if CtrlDown then |
558 | case Result of |
560 | case Result of |
559 | KEY_1: begin Result := $FFFF; if LastKeyDown then ScreenMode(1); end; |
561 | KEY_1: begin Result := $FFFF; if LastKeyDown then ScreenMode(1); end; |
560 | KEY_2: begin Result := $FFFF; if LastKeyDown then ScreenMode(2); end; |
562 | KEY_2: begin Result := $FFFF; if LastKeyDown then ScreenMode(2); end; |
561 | KEY_3: begin Result := $FFFF; if LastKeyDown then ScreenMode(3); end; |
563 | KEY_3: begin Result := $FFFF; if LastKeyDown then ScreenMode(3); end; |