/programs/develop/fp/rtl/Makefile.fpc |
---|
File deleted |
/programs/develop/fp/rtl/build.sh |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:executable |
-* |
\ No newline at end of property |
/programs/develop/fp/rtl/sysfile.inc |
---|
152,8 → 152,5 |
end; |
if InOutRes <> 0 then |
begin |
FreeMem(KosFile); |
FileRec(f).Handle := DWord(-1); |
end; |
end; |
/programs/develop/fp/rtl/build.bat |
---|
1,3 → 1,21 |
@echo off |
fpcmake -Twin32 |
make |
set FPRTL={FreePascal RTL source code, example c:\fp\src\rtl} |
set INCS=-Fi%FPRTL%\inc;%FPRTL%\i386;%FPRTL%\objpas;%FPRTL%\objpas\sysutils;%FPRTL%\objpas\classes |
set UNTS=-Fu%FPRTL%\inc;%FPRTL%\i386;%FPRTL%\objpas |
set BUILDPATH=..\units |
set FPCARGS=-n -Twin32 -Sge5 -O3pPENTIUM3 -CfSSE -di386 -FU%BUILDPATH% %INCS% %UNTS% |
fpc system.pp -Us %FPCARGS% |
if errorlevel 1 goto error |
fpc %FPRTL%\objpas\objpas.pp %FPCARGS% |
if errorlevel 1 goto error |
fpc buildrtl.pp %FPCARGS% |
if errorlevel 0 goto end |
:error |
echo An error occured while building RTL |
:end |
/programs/develop/fp/rtl/system.pp |
---|
1,4 → 1,4 |
{utf8} |
{cp866} |
unit System; |
{$i _defines.inc} |
56,16 → 56,16 |
begin |
while Args^ <> #0 do |
begin |
{Пропустить лидирующие пробелы} |
{யãáâ¨âì «¨¤¨àãî騥 ¯à®¡¥«ë} |
while Args^ in [#1..#32] do Inc(Args); |
if Args^ = #0 then Break; |
{Запомнить указатель на параметр} |
{ ¯®¬¨âì 㪠§ â¥«ì ¯ à ¬¥âà} |
SetLength(Ptrs, Argc); |
Ptrs[Argc - 1] := Args; |
Inc(Argc); |
{Пропустить текущий параметр} |
{யãáâ¨âì ⥪ã騩 ¯ à ¬¥âà} |
InQuotes := False; |
while (Args^ <> #0) and (not (Args^ in [#1..#32]) or InQuotes) do |
begin |
73,7 → 73,7 |
Inc(Args); |
end; |
{Установить окончание параметра} |
{áâ ®¢¨âì ®ª®ç ¨¥ ¯ à ¬¥âà } |
if Args^ in [#1..#32] then |
begin |
Args^ := #0; |
81,12 → 81,12 |
end; |
end; |
end; |
Argv := GetMem(Argc * SizeOf(PChar)); {XXX: память не освобождается} |
Argv := GetMem(Argc * SizeOf(PChar)); {XXX: ¯ ¬ïâì ¥ ®á¢®¡®¦¤ ¥âáï} |
Argv[0] := PKosHeader(0)^.path; |
for I := 1 to Argc - 1 do |
begin |
Argv[I] := Ptrs[I - 1]; |
{Исключить кавычки из строки} |
{᪫îç¨âì ª ¢ë窨 ¨§ áâப¨} |
Args := Argv[I]; |
L := 0; |
while Args^ <> #0 do begin Inc(Args); Inc(L); end; |
118,7 → 118,7 |
procedure Randomize; |
begin |
randseed := kos_timecounter(); |
randseed := 0; {GetTickCount()} |
end; |
const |
136,6 → 136,7 |
end; |
{$i kos_stdio.inc} |
{-$i kos_term.inc} |
procedure SysInitStdIO; |
begin |
157,15 → 158,15 |
begin |
if ExitCode <> 0 then |
begin |
{XXX: обязательное условие на однопоточный Konsole} |
{XXX: ®¡ï§ ⥫쮥 ãá«®¢¨¥ ®¤®¯®â®çë© Konsole} |
Write(StdErr, '[Error #', ExitCode,', press any key]'); |
{ожидать нажатия клавиши} |
{®¦¨¤ âì ¦ â¨ï ª« ¢¨è¨} |
Konsole.KeyPressed; |
while Konsole.KeyPressed = 0 do kos_delay(2); |
{TODO: исправить косяк при перерисовке Konsole} |
{это невозможно, так как куча освобождается еще до вызова этой процедуры} |
{можно написать свой диспетчер памяти, но это сложно} |
{а если в Konsole использовать выделение памяти напрямую через KosAPI?!} |
{TODO: ¨á¯à ¢¨âì ª®áïª ¯à¨ ¯¥à¥à¨á®¢ª¥ Konsole} |
{íâ® ¥¢®§¬®¦®, â ª ª ª ªãç ®á¢®¡®¦¤ ¥âáï ¥é¥ ¤® ¢ë§®¢ í⮩ ¯à®æ¥¤ãàë} |
{¬®¦® ¯¨á âì ᢮© ¤¨á¯¥âç¥à ¯ ¬ïâ¨, ® íâ® á«®¦®} |
{ ¥á«¨ ¢ Konsole ¨á¯®«ì§®¢ âì ¢ë¤¥«¥¨¥ ¯ ¬ï⨠¯àï¬ãî ç¥à¥§ KosAPI?!} |
end; |
Close(StdErr); |
Close(StdOut); |
/programs/develop/fp/rtl/sysutils.pp |
---|
1,13 → 1,12 |
{utf8} |
unit sysutils; |
{$i _defines.inc} |
{$mode objfpc} |
{$h+} |
interface |
{$mode objfpc} |
{ force ansistrings } |
{$h+} |
{$DEFINE HAS_SLEEP} |
{-$DEFINE HAS_OSERROR} |
151,7 → 150,7 |
fsFromCurrent: Position := FilePos(FileRecordByHandle(Handle)^.F) + FOffset; |
fsFromEnd: Position := FileSize(FileRecordByHandle(Handle)^.F) + FOffset; |
end; |
{TODO: проверка соответствия [0..filesize]} |
{TODO: ¯à®¢¥àª ᮮ⢥âá⢨ï [0..filesize]} |
Seek(FileRecordByHandle(Handle)^.F, Position); |
Result := Position; |
end; |
176,17 → 175,16 |
var |
F: File; |
begin |
{$i-} |
Assign(F, FileName); |
try |
Reset(F); |
if IOResult = 0 then |
begin |
FileSize(F); |
Result := True; |
Close(F); |
end else |
except |
Result := False; |
{$i+} |
end; |
Close(F); |
end; |
function DirectoryExists(const Directory: String): Boolean; |
begin |
/programs/develop/fp/utils/exe2kos/build.sh |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:executable |
-* |
\ No newline at end of property |
/programs/develop/fp/utils/exe2kos/build.bat |
---|
File deleted |
\ No newline at end of file |
/programs/develop/fp/examples/Makefile.fpc |
---|
File deleted |
/programs/develop/fp/examples/src/example.pp |
---|
File deleted |
/programs/develop/fp/examples/src/ray.pp |
---|
File deleted |
/programs/develop/fp/examples/_build.bat |
---|
0,0 → 1,21 |
@echo off |
set NAME=%1 |
set NAMEEXE=%NAME%.exe |
set NAMEKEX=%NAME%.kex |
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% %NAMEKEX% |
del %NAMEEXE% |
move %NAMEKEX% bin |
goto end |
:error |
echo An error occured while building %NAME% |
:end |
/programs/develop/fp/examples/ray.bat |
---|
0,0 → 1,0 |
@call _build.bat ray |
/programs/develop/fp/examples/ray.pp |
---|
0,0 → 1,256 |
{ FreePascal 2.2.0 ª®¤¨à®¢ª cp866 ¥ ॠ«¨§®¢ . } |
{-$codepage cp866} |
{$mode objfpc} |
{$apptype gui} |
{$r-} |
program Ray; |
const |
MSG_PRESSKEY = ' ¦¬¨ ª®¯ªã...'; |
MSG_USAGE = '«ï ¯¥à¥¬¥è¥¨ï ¨ ¢à è¥¨ï ¨á¯®«ì§ã© áâ५ª¨'; |
WIDTH = 320; |
HEIGHT = 200; |
COLORS = 128; |
FlatPalette: array[1..COLORS * 3] of Byte = ( |
0,10,20,48,48,48,1,0,43,1,3,43,2,5,44,2,7,44,3,9,45,4,11,46,5,13,47,6,15,48, |
7,17,49,8,19,50,9,21,51,10,22,52,11,24,52,12,26,54,13,28,54,14,30,56,15,32, |
56,16,34,58,17,34,58,17,36,58,18,38,60,19,40,60,20,42,62,21,44,62,10,31,0, |
11,31,0,11,31,1,11,32,1,12,32,1,12,32,2,12,33,2,13,33,2,14,33,3,15,33,3,15, |
34,3,15,34,4,15,35,4,16,35,4,16,35,5,16,36,5,17,36,5,17,36,6,18,37,6,18,38, |
7,19,38,8,20,39,8,20,40,9,21,40,10,22,41,10,22,42,11,23,42,12,24,43,12,24, |
44,13,25,44,14,25,45,14,26,46,15,27,46,16,27,47,17,28,47,18,28,48,19,29,49, |
19,30,49,20,30,50,21,31,51,21,32,51,22,32,52,23,33,53,23,34,53,24,34,54,25, |
35,55,25,36,55,26,36,56,27,37,57,27,38,57,27,39,57,27,41,57,27,42,57,27,43, |
57,27,44,57,27,45,57,27,46,57,27,47,57,27,49,57,27,50,57,27,51,57,27,52,57, |
27,53,57,27,55,57,27,56,57,27,57,57,27,58,57,27,58,57,26,58,57,25,58,57,24, |
58,56,23,58,55,22,58,54,20,58,53,19,58,51,18,58,50,17,58,50,16,58,49,15,58, |
48,14,58,47,13,58,46,12,58,45,11,58,44,11,58,44,10,58,43,10,58,42,9,57,41, |
8,57,40,8,56,39,7,56,38,6,55,37,5,55,35,4,54,33,4,54,31,2,32,32,32,63,63,63, |
63,63,63,63,63,63,63,63,63,48,48,48,63,63,63,63,63,63); |
type |
TRGBColor = packed record |
R, G, B: Byte; |
end; |
PRGBPalette = ^TRGBPalette; |
TRGBPalette = array[0..COLORS - 1] of TRGBColor; |
PRGBBuffer = ^TRGBBuffer; |
TRGBBuffer = array[0..HEIGHT - 1, 0..WIDTH - 1] of TRGBColor; |
lrgarr = array[Word] of Byte; |
sq = array[0..254, 0..255] of Byte; |
var |
mp: ^lrgarr; |
rng: array[0..320] of Byte; |
fcos, fsin: array[0..359] of Integer; |
RGBBuffer : PRGBBuffer; |
RGBPalette: TRGBPalette absolute FlatPalette; |
Message: String = ''; |
function NCol(mc, n, dvd: Longint): Byte; |
var |
loc: Byte; |
begin |
loc := Byte((mc + n - Random(2 * n)) div dvd); |
if loc > 100 then Result := 100 else |
if loc < 5 then Result := 5 else |
Result := loc; |
end; |
procedure Plasma(x1, y1, x2, y2: Word); |
var |
xn, yn, dxy : Word; |
p1, p2, p3, p4: Word; |
begin |
if (x2 - x1 > 1) or (y2 - y1 > 1) then |
begin |
p1 := mp^[Word(y1 shl 8 + x1)]; |
p2 := mp^[Word(y2 shl 8 + x1)]; |
p3 := mp^[Word(y1 shl 8 + x2)]; |
p4 := mp^[Word(y2 shl 8 + x2)]; |
xn := (x2 + x1) shr 1; |
yn := (y2 + y1) shr 1; |
dxy:= 5 * (x2 - x1 + y2 - y1) div 3; |
if mp^[y1 shl 8 + xn] = 0 then mp^[Word(y1 shl 8 + xn)] := NCol(p1 + p3, dxy, 2); |
if mp^[yn shl 8 + x1] = 0 then mp^[Word(yn shl 8 + x1)] := NCol(p1 + p2, dxy, 2); |
if mp^[yn shl 8 + x2] = 0 then mp^[Word(yn shl 8 + x2)] := NCol(p3 + p4, dxy, 2); |
if mp^[y2 shl 8 + xn] = 0 then mp^[Word(y2 shl 8 + xn)] := NCol(p2 + p4, dxy, 2); |
mp^[Word(yn shl 8 + xn)] := NCol(p1 + p2 + p3 + p4, dxy, 4); |
Plasma(x1, y1, xn, yn); |
Plasma(xn, y1, x2, yn); |
Plasma(x1, yn, xn, y2); |
Plasma(xn, yn, x2, y2); |
end; |
end; |
procedure Draw(xp, yp, dir: Integer); |
var |
z, zobs : Integer; |
ix, iy, iy1, iyp, ixp : Integer; |
x, y : Integer; |
s, csf, snf, mpc, i, j: Integer; |
begin |
while dir < 0 do Inc(dir, SizeOf(fcos)); |
while dir >= SizeOf(fcos) do Dec(dir, SizeOf(fcos)); |
FillChar(rng, SizeOf(rng), 200); |
FillChar(RGBBuffer^, SizeOf(RGBBuffer^), 0); |
zobs := 300 + mp^[Word(yp shl 8 + xp)]; |
csf := fcos[dir]; |
snf := fsin[dir]; |
for iy := yp to yp+150 do |
begin |
iy1 := 1 + 2 * (iy - yp); |
s := 4 + 300 div iy1; |
for ix := xp + yp - iy to xp - yp + iy do |
begin |
ixp := xp + ((ix - xp) * csf + (iy - yp) * snf) shr 8; |
iyp := yp + ((iy - yp) * csf - (ix - xp) * snf) shr 8; |
x := 160 + 360 * (ix - xp) div iy1; |
if (x >= 0) and (x + s < 319) then |
begin |
z := mp^[Word(iyp shl 8 + ixp)]; |
mpc := z shr 1; |
if z < 40 then z := 40; |
y := 100 + (zobs - z) * 30 div iy1; |
if (y < 200) and (y >= 0) then |
for j := x to x + s do |
if y < rng[j] then |
begin |
for i := y to rng[j] do |
RGBBuffer^[i - 1, j] := RGBPalette[mpc]; |
rng[j] := y; |
end; |
end; |
end; |
end; |
end; |
procedure Paint; |
begin |
kos_begindraw(); |
kos_definewindow(100, 100, WIDTH - 1, HEIGHT - 1, $01000000); |
kos_drawimage24(0, 0, WIDTH, HEIGHT, RGBBuffer); |
if Message <> '' then |
kos_drawtext(12, HEIGHT - 12 - 9, Message, $00FF00, $FF000000); |
kos_enddraw(); |
end; |
function ReadKey: Char; |
var |
Event: Word; |
begin |
kos_maskevents(ME_PAINT or ME_KEYBOARD); |
repeat |
Event := kos_getevent(); |
if Event = SE_PAINT then Paint; |
until Event = SE_KEYBOARD; |
Result := Chr(kos_getkey() shr 8); |
end; |
procedure Pause; |
begin |
kos_maskevents(ME_PAINT or ME_KEYBOARD); |
Message := MSG_PRESSKEY; |
Paint; |
ReadKey; |
end; |
var |
dir, i, j, x, y: Longint; |
C: Char; |
B: Byte; |
Terminate: Boolean; |
begin |
{ â ¡«¨æë § 票© á¨ãá ¨ ª®á¨ãá } |
for i := 0 to 359 do |
begin |
fcos[i] := Trunc(256 * Cos(i / 180 * Pi)); |
fsin[i] := Trunc(256 * Sin(i / 180 * Pi)); |
end; |
{ ᮧ¤ ¥¬ ¡ãä¥à á íä䥪⮬ "¯« §¬ " } |
New(mp); |
FillChar(mp^, SizeOf(mp^), 0); |
mp^[$0000] := 128; |
Plasma(0, 0, 256, 256); |
{ ᮧ¤ ¥¬ "¯ãá⮩" ¡ãä¥à ª ¤à } |
New(RGBBuffer); |
FillChar(RGBBuffer^, SizeOf(RGBBuffer^), 0); |
{ ¯à¥®¡à §®¢ ¨¥ ¯ «¨âàë ¨§ 63 ¢ 255 } |
for i := 0 to COLORS - 1 do |
begin |
B := Round(RGBPalette[i].R / 63 * 255); |
RGBPalette[i].R := Round(RGBPalette[i].B / 63 * 255); |
RGBPalette[i].G := Round(RGBPalette[i].G / 63 * 255); |
RGBPalette[i].B := B; |
end; |
for j := 0 to 199 do |
for i := 0 to 255 do |
RGBBuffer^[j, i + (WIDTH - 256) shr 1] := RGBPalette[sq(Pointer(mp)^)[j, i]]; |
Pause; |
x := 0; |
y := 0; |
dir := 0; |
Message := MSG_USAGE; |
Terminate := False; |
while not Terminate do |
begin |
dir := dir mod 360; |
if dir < 0 then dir := 360 + dir; |
Draw(x, y, dir); |
Paint; |
C := ReadKey; |
if C = #$B0 then Dec(dir, 13) else |
if C = #$B3 then Inc(dir, 13) else |
if C = #$B2 then |
begin |
y := y + fcos[dir] shr 6; |
x := x + fsin[dir] shr 6; |
end else |
if C = #$B1 then |
begin |
y := y - fcos[dir] shr 6; |
x := x - fsin[dir] shr 6; |
end; |
if C = #27 then Terminate := True; |
end; |
end. |
/programs/develop/fp/examples/readme-ru.txt |
---|
1,21 → 1,0 |
«ï ç « ¥®¡å®¦¨¬® ᮡà âì RTL (../rtl/build.sh ¨«¨ ..\rtl\build.bat) ¨ |
ã⨫¨âã exe2kos (../utils/exe2kos/build.sh ¨«¨ ..\utils\exe2kos\exe2kos.bat). |
¡¥¤¨â¥áì çâ®, ®â®á¨â¥«ì® ¤ ®© ¯ ¯ª¨, áãé¥áâ¢ãîâ ä ©« ../bin/exe2kos ¤«ï |
Linux ¨«¨ ..\bin\exe2kos.exe ¤«ï Windows. ª ¦¥ ã¡¥¤¨â¥áì çâ® áãé¥áâ¢ã¥â ¥ |
¯ãáâ ï ¤¨à¥ªâ®à¨ï ../units/rtl ¤«ï Linux ¨«¨ ..\units\rtl ¤«ï Windows. |
¥à¥¬¥ ï ®ªà㦥¨ï FPCDIR ¤®«¦ 㪠§ë¢ âì ¯ ¯ªã á FreePascal (¯ãâì |
㪠§ë¢ ¥âáï ¡¥§ § ¢¥àè î饣® á«íè ¨«¨ ®¡à ⮣® á«íè ). |
¥à¥¬¥ ï ®ªà㦥¨ï KFPCDIR ¤®«¦ 㪠§ë¢ âì ¯ ¯ªã á ¯à®¥ªâ®¬ KolibriOS |
FreePascal (¯ãâì 㪠§ë¢ ¥âáï ¡¥§ § ¢¥àè î饣® á«íè ¨«¨ ®¡à ⮣® á«íè ). í⮩ |
¯ ¯ª¥ ¤®«¦ë 室¨âìáï â ª¨¥ ¤¨à¥ªâ®à¨¨: bin, examples, rtl, units, utils. |
®á«¥ í⮣® ¢ë¯®«¨â¥ á«¥¤ãî騥 ª®¬ ¤ë ¢ ¤ ®© ¯ ¯ª¥ (¡¥§ § ª $ ¨ ¯à®¡¥« |
¯®á«¥ ¥£®): |
$ fpcmake -Twin32 |
$ make |
᫨ ¢ë ¢á¥ ᤥ« ¨ ¯à ¢¨«ì®, â® ¢ ¯ ¯ª¥ bin ¯®ï¢ïâáï ¨á¯®«ï¥¬ë¥ ä ©«ë á |
à áè¨à¥¨¥¬ kex. |
build - ¢à¥¬¥ ï ¯ ¯ª , ¨á¯®«ì§ã¥¬ ï ¯à¨ á¡®àª¥, ¬®¦¥â¥ 㤠«¨âì ¥ñ. |
«ï ç « ¥®¡å®¦¨¬® ᮡà âì RTL ¨ ã⨫¨âã exe2kos. |
/programs/develop/fp/examples/build |
---|
Property changes: |
Added: svn:ignore |
+*.exe |
+*.kex |
+*.a |
+*.o |
+*.ppu |
+*.log |
/programs/develop/fp/examples/example.pp |
---|
0,0 → 1,101 |
{ FreePascal 2.2.0 ª®¤¨à®¢ª cp866 ¥ ॠ«¨§®¢ . } |
{-$codepage cp866} |
{$mode objfpc} |
{$smartlink on} |
{$apptype console} |
{ ¤ ë© ¬®¬¥â à áᬠâਢ ¥âáï ¢ë¯®«¥¨¥ ¯à¨«®¤¥¨ï ⮫쪮 ª ª ª®á®«ì®¥, |
â.¥. ¤¨à¥ªâ¨¢ console ®¡ï§ ⥫ì , ¯®¢¥¤¥¨¥ ¯à®£à ¬¬ë ¯à¨ ®âáãâá⢨¨ í⮩ |
¤¨à¥ªâ¨¢ë ¯à¥¤®¯à¥¤¥«¨âì ¥«ì§ï. à â¨à®¢ ® ¥«ì§ï ¨á¯®«ì§®¢ âì äãªæ¨¨ |
Write, WriteLn, Read, ReadLn ®â®á¨â¥«ì® áâ ¤ à⮩ ª®á®«¨ ¢¢®¤ /¢ë¢®¤ . |
} |
program Example; |
{ ᥠäãªæ¨¨ ¨¬¥î騥 ¢ ᢮¥¬ ¨¬¥¨ ¯à¥ä¨ªá 'kos_' ïîâáï ¯« âä®à¬®§ ¢¨á¨¬ë¬¨ |
¨ ॠ«¨§®¢ ë ⮫쪮 ¯®¤ KolibriOS. å ¨á¯®«ì§®¢ ¨¥ ¢ «î¡ëå ¯à®£à ¬¬ëå |
¯à¨«®¦¥¨ïå ª ⥣®à¨ç¥áª¨ ¥ ४®¬¥¤®¢ ®, ¢ë®á¨â¥ ¢á¥ ¬¥â®¤ë, ¨á¯®«ì§ãî騥 |
í⨠äãªæ¨¨, ¢ ®â¤¥«ìë¥ ¬®¤ã«¨ (¨ ¨á¯®«ì§ã©â¥ ¥®¡å®¤¨¬ë¥ ¡áâà ªæ¨¨). |
} |
procedure DoPaint; |
{ 뢮¤ ᮤ¥à¦¨¬®£® ®ª ¯à¨«®¦¥¨ï } |
begin |
kos_begindraw(); |
{®¯à¥¤¥«¥¨¥ ¯ à ¬¥â஢ ®ª } |
kos_definewindow(200, 200, 200, 50, $23AABBCC); |
{kos_definewindow ¥ ¨¬¥¥â ¯ à ¬¥âà ¤«ï ¢ë¢®¤ § £®«®¢ª , |
¤¥« ¥¬ íâ® ®â¤¥«ì®© äãªæ¨¥© kos_setcaption} |
{®â®¡à ¦¥¨¥ § £®«®¢ª ®ª } |
kos_setcaption(' '); |
{¢ë¢®¤ á®®¡é¥¨ï} |
kos_drawtext(3, 8, ' ¦¬¨â¥ «î¡ãî ª« ¢¨èã...'); |
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_speaker(@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 := True; |
{®¦¨¤ ¥¬ ᮡëâ¨ï ®â á¨á⥬ë} |
Event := kos_getevent(); |
case Event of |
SE_PAINT : DoPaint; {¯¥à¥à¨á®¢ª ®ª } |
SE_KEYBOARD: DoKey; {ᮡë⨥ ®â ª« ¢¨ âãàë} |
SE_BUTTON : Result := DoButton; {ᮡ먥 ®â ª®¯ª¨, ¬®¦¥â ®¯à¥¤¥«¨âì |
§ ¢¥à襨¥ ¯à¨«®¦¥¨ï, ¥á«¨ ¢¥à¥â False} |
end; |
end; |
procedure MainLoop; |
{ « ¢ë© 横« ¯à¨«®¦¥¨ï } |
var |
ThreadSlot: TThreadSlot; |
begin |
{ áâà ¨¢ ¥¬ ᮡëâ¨ï, ª®â®àë¥ ¬ë £®â®¢ë ®¡à ¡ âë¢ âì} |
kos_maskevents(ME_PAINT or ME_KEYBOARD or ME_BUTTON); |
{®¡à ¡®âª ᮡë⨩} |
while ProcessMessage do; |
end; |
begin |
WriteLn('Look for a new window, I''m just a konsole ;-)'); |
MainLoop; |
end. |
/programs/develop/fp/examples/example.bat |
---|
0,0 → 1,0 |
@_build example |