/programs/develop/fp/rtl/Makefile.fpc |
---|
0,0 → 1,67 |
# |
# Makefile.fpc for Free Pascal KolibriOS RTL |
# |
[package] |
main=rtl |
[target] |
loaders=$(LOADERS) |
units=system objpas buildrtl |
#implicitunits=sysinitpas sysinitcyg sysinitgprof \ |
# ctypes strings \ |
# lineinfo lnfodwrf heaptrc matrix \ |
# windows winsock winsock2 initc cmem dynlibs signals \ |
# dos crt objects messages \ |
# rtlconsts sysconst sysutils math types \ |
# strutils dateutils varutils variants typinfo fgl classes \ |
# convutils stdconvs cpu mmx charset ucomplex getopts \ |
# winevent sockets printer \ |
# video mouse keyboard fmtbcd \ |
# winsysut sharemem |
#rsts=math varutils typinfo variants classes dateutils sysconst |
[require] |
nortl=y |
[install] |
fpcpackage=y |
[default] |
target=win32 |
cpu=i386 |
[compiler] |
unittargetdir=../units/rtl |
includedir=$(INC) $(PROCINC) |
sourcedir=$(INC) $(PROCINC) |
[prerules] |
RTL=$(FPCDIR)/rtl |
INC=$(RTL)/inc |
PROCINC=$(RTL)/$(CPU_TARGET) |
OBJPASDIR=$(RTL)/objpas |
[rules] |
.NOTPARALLEL: |
SYSTEMPPU=$(addsuffix $(PPUEXT),system) |
include $(INC)/makefile.inc |
SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES)) |
include $(PROCINC)/makefile.cpu |
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) |
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) |
# Unit specific rules |
system$(PPUEXT): system.pp $(SYSDEPS) |
$(COMPILER) -Us -Sg system.pp |
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc system$(PPUEXT) |
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp |
buildrtl$(PPUEXT): buildrtl.pp system$(PPUEXT) objpas$(PPUEXT) |
$(COMPILER) -Fi$(OBJPASDIR)/sysutils -Fi$(OBJPASDIR)/classes -Fu$(PROCINC) -I$(OBJPASDIR) -I$(INC) -Fu$(INC) -Fu$(OBJPASDIR) buildrtl |
/programs/develop/fp/rtl/build.bat |
---|
1,21 → 1,3 |
@echo off |
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 |
fpcmake -Twin32 |
make |
/programs/develop/fp/rtl/build.sh |
---|
0,0 → 1,3 |
#!/bin/sh |
fpcmake -Twin32 |
make |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/programs/develop/fp/rtl/sysfile.inc |
---|
152,5 → 152,8 |
end; |
if InOutRes <> 0 then |
begin |
FreeMem(KosFile); |
FileRec(f).Handle := DWord(-1); |
end; |
end; |
/programs/develop/fp/rtl/system.pp |
---|
1,4 → 1,4 |
{cp866} |
{utf8} |
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 := 0; {GetTickCount()} |
randseed := kos_timecounter(); |
end; |
const |
136,7 → 136,6 |
end; |
{$i kos_stdio.inc} |
{-$i kos_term.inc} |
procedure SysInitStdIO; |
begin |
158,15 → 157,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,12 → 1,13 |
{utf8} |
unit sysutils; |
{$i _defines.inc} |
{$mode objfpc} |
{$h+} |
interface |
{$mode objfpc} |
{ force ansistrings } |
{$h+} |
{$DEFINE HAS_SLEEP} |
{-$DEFINE HAS_OSERROR} |
150,7 → 151,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; |
175,16 → 176,17 |
var |
F: File; |
begin |
{$i-} |
Assign(F, FileName); |
try |
Reset(F); |
FileSize(F); |
if IOResult = 0 then |
begin |
Result := True; |
except |
Close(F); |
end else |
Result := False; |
{$i+} |
end; |
Close(F); |
end; |
function DirectoryExists(const Directory: String): Boolean; |
begin |