Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 783 → Rev 790

/programs/develop/fp/examples/_build.bat
File deleted
/programs/develop/fp/examples/ray.bat
File deleted
/programs/develop/fp/examples/example.pp
File deleted
/programs/develop/fp/examples/build
Property changes:
Deleted: svn:ignore
-*.exe
-*.kex
-*.a
-*.o
-*.ppu
-*.log
/programs/develop/fp/examples/example.bat
File deleted
/programs/develop/fp/examples/ray.pp
File deleted
/programs/develop/fp/examples/Makefile.fpc
0,0 → 1,42
[target]
programs=example ray
 
[default]
target=win32
cpu=i386
 
[compiler]
options=-dKOLIBRI
unittargetdir=build
targetdir=bin
sourcedir=src
 
[prerules]
ifdef KFPCDIR
override KFPCDIR:=$(subst \,/,$(KFPCDIR))
ifeq ($(wildcard $(KFPCDIR)/bin),)
override KFPCDIR=wrong
endif
else
override KFPCDIR=wrong
endif
 
ifeq ($(KFPCDIR),wrong)
$(error The KFPCDIR environment is wrong)
endif
 
#UNITSDIR:=$(wildcard $(FPCDIR)/units/$(CPU_TARGET)-kolibri)
UNITSDIR:=$(wildcard $(KFPCDIR)/units)
KOSEXT=.kex
EXE2KEX=$(KFPCDIR)/bin/exe2kos
 
[rules]
ifneq ($(TARGET_PROGRAMS),)
KOSFILES=$(addsuffix $(KOSEXT),$(TARGET_PROGRAMS))
endif
 
fpc_all: $(KOSFILES)
 
%$(KOSEXT): %$(EXEEXT)
@$(EXE2KEX) $(COMPILER_TARGETDIR)/$^ $(COMPILER_TARGETDIR)/$@
@$(DEL) $(COMPILER_TARGETDIR)/$^
/programs/develop/fp/examples/readme-ru.txt
1,0 → 0,0
„«ï ­ ç «  ­¥®¡å®¦¨¬® ᮡà âì RTL ¨ ã⨫¨âã exe2kos.
„«ï ­ ç «  ­¥®¡å®¦¨¬® ᮡà âì 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 - ¢à¥¬¥­­ ï ¯ ¯ª , ¨á¯®«ì§ã¥¬ ï ¯à¨ ᡮથ, ¬®¦¥â¥ 㤠«¨âì ¥ñ.
/programs/develop/fp/examples/src/example.pp
0,0 → 1,98
 
{ ‚ FreePascal 2.2.0 ª®¤¨à®¢ª  cp866 ­¥ ॠ«¨§®¢ ­ . }
{-$codepage cp866}
 
{$mode objfpc}
{$smartlink on}
{$apptype gui}
 
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;
 
 
{ ƒ« ¢­ë© 横« ¯à¨«®¦¥­¨ï }
var
ThreadSlot: TThreadSlot;
begin
{ ­ áâà ¨¢ ¥¬ ᮡëâ¨ï, ª®â®àë¥ ¬ë £®â®¢ë ®¡à ¡ â뢠âì }
kos_maskevents(ME_PAINT or ME_KEYBOARD or ME_BUTTON);
 
{ ®¡à ¡®âª  ᮡë⨩ }
while ProcessMessage do;
end.
/programs/develop/fp/examples/src/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/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
/programs/develop/fp/utils/exe2kos/build.bat
0,0 → 1,5
@echo off
fpc -Twin32 exe2kos.pp
del *.o
del *.ppu
move exe2kos.exe ..\..\bin
/programs/develop/fp/utils/exe2kos/build.sh
0,0 → 1,5
#!/bin/sh
fpc -Tlinux exe2kos.pp &&
rm *.o &&
rm *.ppu &&
mv exe2kos ../../bin
Property changes:
Added: svn:executable
+*
\ No newline at end of property