forked from KolibriOS/kolibrios
[FP] changes in RTL, first example
git-svn-id: svn://kolibrios.org@623 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
2df5588f95
commit
63328e8522
20
programs/develop/fp/examples/_build.bat
Normal file
20
programs/develop/fp/examples/_build.bat
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
set NAME=%1
|
||||||
|
set NAMEEXE=%NAME%.exe
|
||||||
|
set NAMEKOS=%NAME%
|
||||||
|
|
||||||
|
set BUILD=-FUbuild
|
||||||
|
set UNTS=-Fu..\units
|
||||||
|
|
||||||
|
fpc %NAME%.pp -n -Twin32 -Se5 -XXs -Sg -O3pPENTIUM3 -CfSSE -WB0 %BUILD% %UNTS%
|
||||||
|
if errorlevel 1 goto error
|
||||||
|
|
||||||
|
..\exe2kos\exe2kos.exe %NAMEEXE% %NAMEKOS%.kex
|
||||||
|
del %NAMEEXE%
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:error
|
||||||
|
echo An error occured while building %NAME%
|
||||||
|
|
||||||
|
:end
|
1
programs/develop/fp/examples/example.bat
Normal file
1
programs/develop/fp/examples/example.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
@_build example
|
99
programs/develop/fp/examples/example.pp
Normal file
99
programs/develop/fp/examples/example.pp
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
{$codepage cp866}
|
||||||
|
{$mode objfpc}
|
||||||
|
{$smartlink on}
|
||||||
|
{$apptype console}
|
||||||
|
|
||||||
|
{ <EFBFBD> ¤ ë© ¬®¬¥â à áᬠâਢ ¥âáï ¢ë¯®«¥¨¥ ¯à¨«®¤¥¨ï ⮫쪮 ª ª ª®á®«ì®¥,
|
||||||
|
â.¥. ¤¨à¥ªâ¨¢ concole ®¡ï§ ⥫ì , ¯®¢¥¤¥¨¥ ¯à®£à ¬¬ë ¯à¨ ®âáãâá⢨¨ í⮩
|
||||||
|
¤¨à¥ªâ¨¢ë ¯à¥¤®¯à¥¤¥«¨âì ¥«ì§ï. ƒ à â¨à®¢ ® ¥«ì§ï ¨á¯®«ì§®¢ âì äãªæ¨¨
|
||||||
|
Write, WriteLn, Read, ReadLn ®â®á¨â¥«ì® áâ ¤ à⮩ ª®á®«¨ ¢¢®¤ /¢ë¢®¤ .
|
||||||
|
}
|
||||||
|
|
||||||
|
program Example;
|
||||||
|
|
||||||
|
{ ‚ᥠäãªæ¨¨ ¨¬¥î騥 ¢ ᢮¥¬ ¨¬¥¨ ¯à¥ä¨ªá 'kos_' ïîâáï ¯« âä®à¬®§ ¢¨á¨¬ë¬¨
|
||||||
|
¨ ॠ«¨§®¢ ë ⮫쪮 ¯®¤ KolibriOS. ˆå ¨á¯®«ì§®¢ ¨¥ ¢ «î¡ëå ¯à®£à ¬¬ëå
|
||||||
|
¯à¨«®¦¥¨ïå ª ⥣®à¨ç¥áª¨ ¥ ४®¬¥¤®¢ ®, ¢ë®á¨â¥ ¢á¥ ¬¥â®¤ë, ¨á¯®«ì§ãî騥
|
||||||
|
í⨠äãªæ¨¨, ¢ ®â¤¥«ìë¥ ¬®¤ã«¨ (¨ ¨á¯®«ì§ã©â¥ ¥®¡å®¤¨¬ë¥ ¡áâà ªæ¨¨).
|
||||||
|
}
|
||||||
|
|
||||||
|
procedure DoPaint;
|
||||||
|
{ ‚뢮¤ ᮤ¥à¦¨¬®£® ®ª ¯à¨«®¦¥¨ï }
|
||||||
|
begin
|
||||||
|
kos_begindraw();
|
||||||
|
{®¯à¥¤¥«¥¨¥ ¯ à ¬¥â஢ ®ª (0)}
|
||||||
|
kos_definewindow(200, 200, 200, 50, $23AABBCC);
|
||||||
|
{kos_definewindow ¥ ¨¬¥¥â ¯ à ¬¥âà ¤«ï ¢ë¢®¤ § £®«®¢ª ,
|
||||||
|
¤¥« ¥¬ íâ® ®â¤¥«ì®© äãªæ¨¥©}
|
||||||
|
{kos_setcaption, ®â®¡à ¦¥¨¥ § £®«®¢ª ®ª (71.1)}
|
||||||
|
kos_setcaption('<27><>ˆŒ…<C592> <20><>Žƒ<C5BD>€ŒŒ›');
|
||||||
|
{¢ë¢®¤ á®®¡é¥¨ï (4)}
|
||||||
|
kos_drawtext(3, 8, '<27> ¦¬¨â¥ «î¡ãî ª« ¢¨èã...');
|
||||||
|
kos_enddraw();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure DoKey;
|
||||||
|
{ Ž¡à ¡®âª ᮡëâ¨ï ¦ â¨ï ª« ¢¨è¨ }
|
||||||
|
var
|
||||||
|
Key: DWord;
|
||||||
|
Notes: array[0..3] of Byte;
|
||||||
|
begin
|
||||||
|
Key := kos_getkey();
|
||||||
|
{ áâà ¨¢ ¥¬ ¡ãä¥à ¤«ï ®â}
|
||||||
|
Notes[0] := $90;
|
||||||
|
Notes[1] := Key shr 8;
|
||||||
|
Notes[2] := $00;
|
||||||
|
{¢®á¯à®¨§¢®¤¨¬}
|
||||||
|
kos_speak(@Notes);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function DoButton: Boolean;
|
||||||
|
{ Ž¡à ¡®âª ᮡëâ¨ï ¦ â¨ï ª®¯ª¨ GUI }
|
||||||
|
var
|
||||||
|
Button: DWord;
|
||||||
|
begin
|
||||||
|
{¯®«ãç¨âì ª®¤ ¦ ⮩ ª«¨ë¨è¨}
|
||||||
|
Button := kos_getbutton();
|
||||||
|
{¥á«¨ X, â® § ¢¥à襨¥ ¯à¨«®¦¥¨ï}
|
||||||
|
Result := Button = 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function ProcessMessage: Boolean;
|
||||||
|
{ @return: ‚®§¢à é ¥â False, ¥á«¨ ¡ë«® ᮡë⨥ ª § ¢¥àè¥¨î ¯à¨«®¦¥¨ï.
|
||||||
|
@rtype: True ¨«¨ False }
|
||||||
|
var
|
||||||
|
Event: DWord;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
{®¦¨¤ ¥¬ ᮡëâ¨ï ®â á¨á⥬ë}
|
||||||
|
Event := kos_getevent();
|
||||||
|
case Event of
|
||||||
|
SE_PAINT : DoPaint; {¯¥à¥à¨á®¢ª ®ª }
|
||||||
|
SE_KEYBOARD: DoKey; {ᮡë⨥ ®â ª« ¢¨ âãàë}
|
||||||
|
SE_BUTTON : Result := DoButton; {ᮡ먥 ®â ª®¯ª¨, ¬®¦¥â ®¯à¥¤¥«¨âì
|
||||||
|
§ ¢¥à襨¥ ¯à¨«®¦¥¨ï, ¥á«¨ ¢¥à¥â True}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure MainLoop;
|
||||||
|
{ ƒ« ¢ë© 横« ¯à¨«®¦¥¨ï }
|
||||||
|
var
|
||||||
|
ThreadSlot: TThreadSlot;
|
||||||
|
begin
|
||||||
|
{ᤥ« âì íâ® ®ª® ªâ¨¢ë¬}
|
||||||
|
ThreadSlot := kos_getthreadslot(ThreadID);
|
||||||
|
kos_setactivewindow(ThreadSlot);
|
||||||
|
{ áâà ¨¢ ¥¬ ᮡëâ¨ï, ª®â®àë¥ ¬ë £®â®¢ë ®¡à ¡ âë¢ âì}
|
||||||
|
kos_maskevents(ME_PAINT or ME_KEYBOARD or ME_BUTTON);
|
||||||
|
{£« ¢ë© 横«}
|
||||||
|
while not ProcessMessage do;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
begin
|
||||||
|
WriteLn('Look for a new window, I''m just a konsole, hi mike ;-)');
|
||||||
|
MainLoop;
|
||||||
|
end.
|
3
programs/develop/fp/examples/readme-ru.txt
Normal file
3
programs/develop/fp/examples/readme-ru.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Codepage: cp866
|
||||||
|
|
||||||
|
„«ï ç « ¥®¡å®¦¨¬® ᮡà âì RTL ¨ ã⨫¨âã exe2kos.
|
@ -1,18 +1,18 @@
|
|||||||
Codepage: koi8-r
|
Codepage: cp866
|
||||||
|
|
||||||
Текущий код адаптирован и проверялся только на FreePascal 2.3.1 (SVN 8373) при
|
’¥ªã騩 ª®¤ ¤ ¯â¨à®¢ ¨ ¯à®¢¥àï«áï ⮫쪮 FreePascal 2.3.1 (SVN 8373) ¯à¨
|
||||||
компиляции из Windows.
|
ª®¬¯¨«ï樨 ¨§ Windows.
|
||||||
|
|
||||||
Для компилирования версии RTL для KolibriOS вам необходимо иметь установленный
|
„«ï ª®¬¯¨«¨à®¢ ¨ï ¢¥àᨨ RTL ¤«ï KolibriOS ¢ ¬ ¥®¡å®¤¨¬® ¨¬¥âì ãáâ ®¢«¥ë©
|
||||||
у себя FreePascal с исходными кодами RTL указанной выше версии. Откройте файл
|
ã ᥡï FreePascal á ¨á室묨 ª®¤ ¬¨ RTL 㪠§ ®© ¢ëè¥ ¢¥àᨨ. Žâªà®©â¥ ä ©«
|
||||||
rtl/build.bat и укажите в переменной окружения FPRTL точный путь к исходному
|
rtl/build.bat ¨ 㪠¦¨â¥ ¢ ¯¥à¥¬¥®© ®ªà㦥¨ï FPRTL â®çë© ¯ãâì ª ¨á室®¬ã
|
||||||
коду оригинальной RTL. Например, если FreePascal установлен в c:\fp, то
|
ª®¤ã ®à¨£¨ «ì®© RTL. <20> ¯à¨¬¥à, ¥á«¨ FreePascal ãáâ ®¢«¥ ¢ c:\fp, â®
|
||||||
вероятнее всего исходный код находится в c:\fp\src\rtl. Этот путь и нужно
|
¢¥à®ï⥥ ¢á¥£® ¨áå®¤ë© ª®¤ 室¨âáï ¢ c:\fp\src\rtl. <20>â®â ¯ãâì ¨ 㦮
|
||||||
указать. Предпологается что иерархия директорий исходников FreePascal сохранена
|
㪠§ âì. <20>।¯®«®£ ¥âáï çâ® ¨¥à àå¨ï ¤¨à¥ªâ®à¨© ¨á室¨ª®¢ FreePascal á®åà ¥
|
||||||
точно такой же как в репозитарии FreePascal'я.
|
â®ç® â ª®© ¦¥ ª ª ¢ ९®§¨â ਨ FreePascal'ï.
|
||||||
|
|
||||||
После изменения rtl/build.bat запустите этот командный файл на выполнение. После
|
<EFBFBD>®á«¥ ¨§¬¥¥¨ï rtl/build.bat § ¯ãáâ¨â¥ íâ®â ª®¬ ¤ë© ä ©« ¢ë¯®«¥¨¥. <20>®á«¥
|
||||||
завершения работы этого файла в папке ./units должны появить модули и объектные
|
§ ¢¥à襨ï à ¡®âë í⮣® ä ©« ¢ ¯ ¯ª¥ ./units ¤®«¦ë ¯®ï¢¨âì ¬®¤ã«¨ ¨ ®¡ê¥ªâë¥
|
||||||
файлы RTL.
|
ä ©«ë RTL.
|
||||||
|
|
||||||
Как теперь собирать программы я опишу позже.
|
Š ª ⥯¥àì ᮡ¨à âì ¯à®£à ¬¬ë ï ®¯¨èã ¯®§¦¥.
|
||||||
|
@ -20,6 +20,7 @@ asm
|
|||||||
movl style, %edx
|
movl style, %edx
|
||||||
decl %ebx {㬥ìè¨âì è¨à¨ã 1}
|
decl %ebx {㬥ìè¨âì è¨à¨ã 1}
|
||||||
decl %ecx {㬥ìè¨âì ¢ëá®âã 1}
|
decl %ecx {㬥ìè¨âì ¢ëá®âã 1}
|
||||||
|
andl $0xEFFFFFFF, %edx
|
||||||
int $0x40
|
int $0x40
|
||||||
popl %edi
|
popl %edi
|
||||||
popl %esi
|
popl %esi
|
||||||
@ -591,6 +592,24 @@ asm
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ Sound }
|
||||||
|
|
||||||
|
function kos_speak(notes: Pointer): Boolean; assembler; register;
|
||||||
|
asm
|
||||||
|
pushl %esi
|
||||||
|
pushl %ebx
|
||||||
|
movl $55, %esi
|
||||||
|
movl %esi, %ebx
|
||||||
|
xchgl %eax, %esi
|
||||||
|
int $0x40
|
||||||
|
{eax = 55 - ®è¨¡ª }
|
||||||
|
andl $1, %eax
|
||||||
|
popl %ebx
|
||||||
|
popl %esi
|
||||||
|
xorb $1, %al
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ Work with hardware }
|
{ Work with hardware }
|
||||||
|
|
||||||
function kos_readport(index: DWord): DWord; assembler; register;
|
function kos_readport(index: DWord): DWord; assembler; register;
|
||||||
|
@ -140,6 +140,10 @@ function kos_rewritefile(kosfile: PKosFile; var writed: Longint): DWord;
|
|||||||
function kos_writefile(kosfile: PKosFile; var writed: Longint): DWord;
|
function kos_writefile(kosfile: PKosFile; var writed: Longint): DWord;
|
||||||
function kos_fileinfo(kosfile: PKosFile): DWord;
|
function kos_fileinfo(kosfile: PKosFile): DWord;
|
||||||
|
|
||||||
|
{ Sound }
|
||||||
|
|
||||||
|
function kos_speak(notes: Pointer): Boolean;
|
||||||
|
|
||||||
{ Work with hardware }
|
{ Work with hardware }
|
||||||
function kos_readport(index: DWord): DWord;
|
function kos_readport(index: DWord): DWord;
|
||||||
procedure kos_writeport(index, value: DWord);
|
procedure kos_writeport(index, value: DWord);
|
||||||
|
Loading…
Reference in New Issue
Block a user