Subversion Repositories Kolibri OS

Rev

Rev 775 | 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;