+ Initial move

This commit is contained in:
michael 2004-10-16 13:14:03 +00:00
parent 6792b5ab16
commit f28bcb9231
78 changed files with 1871 additions and 0 deletions

60
docs/olinuxex/Makefile Normal file
View File

@ -0,0 +1,60 @@
#######################################################################
#
# Makefile to compile all examples and convert them to LaTeX
#
#######################################################################
# Compiler
PP=ppc386
# Unit directory
# UNITDIR=/usr/lib/ppc/0.99.0/linuxunits
# Any options you wish to pass.
PPOPTS=
# Script to convert the programs to LaTeX examples which can be included.
PP2TEX=../pp2tex
# Script to collect all examples in 1 file.
MAKETEX=make1tex
#######################################################################
# No need to edit after this line.
#######################################################################
ifdef UNITDIR
PPOPTS:=$(PPOPTS) -Up$(UNITDIR);
endif
.SUFFIXES: .pp .tex
.PHONY: all tex clean
OBJECTS=ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 ex10 ex11 ex12 ex13 ex14 \
ex15 ex16 ex17 ex18 ex19 ex20 ex21 ex22 ex23 ex24 ex25 ex26 ex27 \
ex28 ex29 ex30 ex31 ex32 ex33 ex34 ex35 ex36 ex37 ex38 ex39 ex40 \
ex41 ex42 ex43 ex44 ex45 ex46 ex47 ex48 ex49 ex51 ex52 ex53 ex54 ex55 \
ex56 ex57 ex58 ex59 ex60 ex61 ex62 ex63 ex64 ex65 ex66 \
ex67 ex68 ex69 ex70 ex71 ex72
# ex73 ex74 ex75 ex76 ex77
TEXOBJECTS=$(addsuffix .tex, $(OBJECTS))
all : $(OBJECTS)
tex : $(TEXOBJECTS)
onetex : tex
$(MAKETEX) $(TEXOBJECTS)
clean :
rm -f *.o *.s $(OBJECTS) $(TEXOBJECTS)
rm -f *.ow *.sw *.exe *.dll
$(OBJECTS): %: %.pp
$(PP) $(PPOPTS) $*
$(TEXOBJECTS): %.tex: %.pp head.tex foot.tex
$(PP2TEX) $*

76
docs/olinuxex/README Normal file
View File

@ -0,0 +1,76 @@
These are the example programs that appear in the FPC documentation.
Units guide, Linux unit :
ex1.pp contains an example of the GetEpochTime function.
ex2.pp contains an example of the GetTimeOfDay function.
ex3.pp contains an example of the EpochToLocal function.
ex4.pp contains an example of the LocalToEpoch function.
ex5.pp contains an example of the GetTime function.
ex6.pp contains an example of the GetDate function.
ex7.pp contains an example of the Execve function.
ex8.pp contains an example of the Execv function.
ex9.pp contains an example of the Execvp function.
ex10.pp contains an example of the Execl function.
ex11.pp contains an example of the Execle function.
ex11.pp contains an example of the Execlp function.
ex13.pp contains an example of the Shell function.
ex14.pp contains an example of the Fork function.
ex15.pp contains an example of the Nice, Set- and GetPriority functions.
ex16.pp contains an example of the GetPid and GetPPid functions.
ex17.pp contains an example of the GetUid and GetEUid functions.
ex18.pp contains an example of the GetGid and GetEgid functions.
ex19.pp contains an example of the fdOpen, fdWrite and fdCLose functions.
ex20.pp contains an example of the fdRead and fdTuncate functions.
ex21.pp contains an example of the Link and UnLink functions.
ex22.pp contains an example of the SymLink and UnLink functions.
ex23.pp contains an example of the Chmod function.
ex24.pp contains an example of the Chown function.
ex25.pp contains an example of the UTime function.
ex26.pp contains an example of the Access function.
ex27.pp contains an example of the Umask function.
ex28.pp contains an example of the FStat function.
ex29.pp contains an example of the LStat function.
ex30.pp contains an example of the FSStat function.
ex31.pp contains an example of the Dup function.
ex32.pp contains an example of the Dup2 function.
ex33.pp contains an example of the Select function.
ex34.pp contains an example of the SelectText function.
ex35.pp contains an example of the OpenDir, ReadDir Telldir and SeekDir functions.
ex36.pp contains an example of the AssignPipe function.
ex37.pp contains an example of the POpen and PClose functions.
ex38.pp contains an example of the AssignStream function.
ex39.pp contains an example of the GetDomainName function.
ex40.pp contains an example of the GetHostName function.
ex41.pp contains an example of the GetEnv function.
ex42.pp contains an example of the SysInfo function.
ex43.pp contains an example of the Uname function.
ex44.pp contains an example of the Octal function.
ex45.pp contains an example of the FExpand function.
ex46.pp contains an example of the FSearch function.
ex47.pp contains an example of the DirName function.
ex48.pp contains an example of the BaseName function.
ex49.pp contains an example of the Glob function.
ex51.pp contains an example of the StringToPPChar function.
ex52.pp contains an example of the GetFS function.
ex53.pp contains an example of the S_ISLNK and related functions.
ex54.pp contains an example of the IOCtl function.
ex55.pp contains an example of the TCGetAttr,TCSetAttr,CFMakeRaw functions.
ex56.pp contains an example of the Shell function.
ex57.pp contains an example of the SigAction function.
ex58.pp contains an example of the Signal function.
ex59.pp contains an example of the Alarm function.
ex60.pp contains an example of the GetDateTime function.
ex61.pp contains an example of the CreateShellArgV function.
ex62.pp contains an example of the ReadLink function.
ex63.pp contains an example of the FRename function.
ex64.pp contains an example of the SysInfo function.
ex64.pp contains an example of the SigRaise function.
ex66.pp contains an example of the MMap function.
ex67.pp contains an example of the FSplit function.
ex68.pp contains an example of the Octal function.
ex69.pp contains an example of the FNMatch function.
ex70.pp contains an example of the StringToPPchar function.
ex71.pp contains an example of the clone function.
ex72.pp contains an example of the NanoSleep function.
serial.pp contains an example of serial port programming in FPC.

10
docs/olinuxex/ex1.pp Normal file
View File

@ -0,0 +1,10 @@
Program Example1;
{ Program to demonstrate the GetEpochTime function. }
Uses oldlinux;
begin
Write ('Secs past the start of the Epoch (00:00 1/1/1980) : ');
Writeln (GetEpochTime);
end.

11
docs/olinuxex/ex10.pp Normal file
View File

@ -0,0 +1,11 @@
Program Example10;
{ Program to demonstrate the Execl function. }
Uses oldlinux, strings;
begin
{ Execute 'ls -l', with current environment. }
{ 'ls' is NOT looked for in PATH environment variable.}
Execl ('/bin/ls -l');
end.

12
docs/olinuxex/ex11.pp Normal file
View File

@ -0,0 +1,12 @@
Program Example11;
{ Program to demonstrate the Execle function. }
Uses oldlinux, strings;
begin
{ Execute 'ls -l', with current environment. }
{ 'ls' is NOT looked for in PATH environment variable.}
{ envp is defined in the system unit.}
Execle ('/bin/ls -l',envp);
end.

12
docs/olinuxex/ex12.pp Normal file
View File

@ -0,0 +1,12 @@
Program Example12;
{ Program to demonstrate the Execlp function. }
Uses oldlinux, strings;
begin
{ Execute 'ls -l', with current environment. }
{ 'ls' is looked for in PATH environment variable.}
{ envp is defined in the system unit.}
Execlp ('ls -l',envp);
end.

11
docs/olinuxex/ex13.pp Normal file
View File

@ -0,0 +1,11 @@
Program Example13;
{ Program to demonstrate the Shell function. }
Uses oldlinux;
begin
{ This will send the output of 'ls -l' to the file ls.out }
{ thanks to the shell's redirection functionality }
Shell ('ls -l >ls.out')
end.

24
docs/olinuxex/ex14.pp Normal file
View File

@ -0,0 +1,24 @@
Program Example14;
{ Program to demonstrate the Fork and WaitPidfunction. }
Uses oldlinux;
Var PID, ExitStatus : Longint;
begin
Writeln ('Spawning a child');
PID:=Fork;
If PID=0 then
begin
Writeln ('Hello From the Child !!');
Writeln ('Exiting with exit status 1 !');
Halt (1);
end
Else
begin
Writeln ('Spawned child with PID : ',PID);
WaitPid (PID,@ExitStatus,0);
Writeln ('Child exited with status : ',ExitStatus shr 8);
end;
end.

14
docs/olinuxex/ex15.pp Normal file
View File

@ -0,0 +1,14 @@
Program Example15;
{ Program to demonstrate the Nice and Get/SetPriority functions. }
Uses oldlinux;
begin
writeln ('Setting priority to 5');
setpriority (prio_process,getpid,5);
writeln ('New priority = ',getpriority (prio_process,getpid));
writeln ('Doing nice 10');
nice (10);
writeln ('New Priority = ',getpriority (prio_process,getpid));
end.

9
docs/olinuxex/ex16.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example16;
{ Program to demonstrate the GetPid, GetPPid function. }
Uses oldlinux;
begin
Writeln ('Process Id = ',getpid,' Parent process Id = ',getppid);
end.

9
docs/olinuxex/ex17.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example17;
{ Program to demonstrate the GetUid and GetEUid functions. }
Uses oldlinux;
begin
writeln ('User Id = ',getuid,' Effective user Id = ',geteuid);
end.

9
docs/olinuxex/ex18.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example18;
{ Program to demonstrate the GetGid and GetEGid functions. }
Uses oldlinux;
begin
writeln ('Group Id = ',getgid,' Effective group Id = ',getegid);
end.

19
docs/olinuxex/ex19.pp Normal file
View File

@ -0,0 +1,19 @@
Program Example19;
{ Program to demonstrate the fdOpen, fdwrite and fdCLose functions. }
Uses oldlinux;
Const Line : String[80] = 'This is easy writing !';
Var FD : Longint;
begin
FD:=fdOpen ('Test.dat',Open_WrOnly or Open_Creat);
if FD>0 then
begin
if length(Line)<>fdwrite (FD,Line[1],Length(Line)) then
Writeln ('Error when writing to file !');
fdClose(FD);
end;
end.

17
docs/olinuxex/ex2.pp Normal file
View File

@ -0,0 +1,17 @@
Program Example2;
{ Program to demonstrate the GetTimeOfDay function. }
Uses oldlinux;
Var TV : TimeVal;
TZ : TimeZone;
begin
GetTimeOfDay (TV);
Writeln ('Seconds : ',tv.sec);
Writeln ('Milliseconds : ',tv.usec);
Writeln ('Minutes west of GMT : ',tz.minuteswest);
Writeln ('Daylight Saving Time : ',tz.dsttime);
Writeln ('Seconds in 1 call : ',GetTimeOfDay);
end.

46
docs/olinuxex/ex20.pp Normal file
View File

@ -0,0 +1,46 @@
Program Example20;
{ Program to demonstrate the fdRead and fdTruncate functions. }
Uses oldlinux;
Const Data : string[10] = '12345687890';
Var FD : Longint;
l : longint;
begin
FD:=fdOpen('test.dat',open_wronly or open_creat,octal(666));
if fd>0 then
begin
{ Fill file with data }
for l:=1 to 10 do
if fdWrite (FD,Data[1],10)<>10 then
begin
writeln ('Error when writing !');
halt(1);
end;
fdClose(FD);
FD:=fdOpen('test.dat',open_rdonly);
{ Read data again }
If FD>0 then
begin
For l:=1 to 5 do
if fdRead (FD,Data[1],10)<>10 then
begin
Writeln ('Error when Reading !');
Halt(2);
end;
fdCLose(FD);
{ Truncating file at 60 bytes }
{ For truncating, file must be open or write }
FD:=fdOpen('test.dat',open_wronly,octal(666));
if FD>0 then
begin
if not fdTruncate(FD,60) then
Writeln('Error when truncating !');
fdClose (FD);
end;
end;
end;
end.

31
docs/olinuxex/ex21.pp Normal file
View File

@ -0,0 +1,31 @@
Program Example21;
{ Program to demonstrate the Link and UnLink functions. }
Uses oldlinux;
Var F : Text;
S : String;
begin
Assign (F,'test.txt');
Rewrite (F);
Writeln (F,'This is written to test.txt');
Close(f);
{ new.txt and test.txt are now the same file }
if not Link ('test.txt','new.txt') then
writeln ('Error when linking !');
{ Removing test.txt still leaves new.txt }
If not Unlink ('test.txt') then
Writeln ('Error when unlinking !');
Assign (f,'new.txt');
Reset (F);
While not EOF(f) do
begin
Readln(F,S);
Writeln ('> ',s);
end;
Close (f);
{ Remove new.txt also }
If not Unlink ('new.txt') then
Writeln ('Error when unlinking !');
end.

33
docs/olinuxex/ex22.pp Normal file
View File

@ -0,0 +1,33 @@
Program Example22;
{ Program to demonstrate the SymLink and UnLink functions. }
Uses oldlinux;
Var F : Text;
S : String;
begin
Assign (F,'test.txt');
Rewrite (F);
Writeln (F,'This is written to test.txt');
Close(f);
{ new.txt and test.txt are now the same file }
if not SymLink ('test.txt','new.txt') then
writeln ('Error when symlinking !');
{ Removing test.txt still leaves new.txt
Pointing now to a non-existent file ! }
If not Unlink ('test.txt') then
Writeln ('Error when unlinking !');
Assign (f,'new.txt');
{ This should fail, since the symbolic link
points to a non-existent file! }
{$i-}
Reset (F);
{$i+}
If IOResult=0 then
Writeln ('This shouldn''t happen');
{ Now remove new.txt also }
If not Unlink ('new.txt') then
Writeln ('Error when unlinking !');
end.

21
docs/olinuxex/ex23.pp Normal file
View File

@ -0,0 +1,21 @@
Program Example23;
{ Program to demonstrate the Chmod function. }
Uses oldlinux;
Var F : Text;
begin
{ Create a file }
Assign (f,'testex21');
Rewrite (F);
Writeln (f,'#!/bin/sh');
Writeln (f,'echo Some text for this file');
Close (F);
{ Octal() makes the correct number from a
number that LOOKS octal }
Chmod ('testex21',octal (777));
{ File is now executable }
execl ('./testex21');
end.

28
docs/olinuxex/ex24.pp Normal file
View File

@ -0,0 +1,28 @@
Program Example24;
{ Program to demonstrate the Chown function. }
Uses oldlinux;
Var UID,GID : Longint;
F : Text;
begin
Writeln ('This will only work if you are root.');
Write ('Enter a UID : ');readln(UID);
Write ('Enter a GID : ');readln(GID);
Assign (f,'test.txt');
Rewrite (f);
Writeln (f,'The owner of this file should become : ');
Writeln (f,'UID : ',UID);
Writeln (f,'GID : ',GID);
Close (F);
if not Chown ('test.txt',UID,GID) then
if LinuxError=Sys_EPERM then
Writeln ('You are not root !')
else
Writeln ('Chmod failed with exit code : ',LinuxError)
else
Writeln ('Changed owner successfully !');
end.

24
docs/olinuxex/ex25.pp Normal file
View File

@ -0,0 +1,24 @@
Program Example25;
{ Program to demonstrate the UTime function. }
Uses oldlinux;
Var utim : utimbuf;
year,month,day,hour,minute,second : Word;
begin
{ Set access and modification time of executable source }
GetTime (hour,minute,second);
GetDate (year,month,day);
utim.actime:=LocalToEpoch(year,month,day,hour,minute,second);
utim.modtime:=utim.actime;
if not Utime('ex25.pp',utim) then
writeln ('Call to UTime failed !')
else
begin
Write ('Set access and modification times to : ');
Write (Hour:2,':',minute:2,':',second,', ');
Writeln (Day:2,'/',month:2,'/',year:4);
end;
end.

13
docs/olinuxex/ex26.pp Normal file
View File

@ -0,0 +1,13 @@
Program Example26;
{ Program to demonstrate the Access function. }
Uses oldlinux;
begin
if Access ('/etc/passwd',W_OK) then
begin
Writeln ('Better check your system.');
Writeln ('I can write to the /etc/passwd file !');
end;
end.

10
docs/olinuxex/ex27.pp Normal file
View File

@ -0,0 +1,10 @@
Program Example27;
{ Program to demonstrate the Umask function. }
Uses oldlinux;
begin
Writeln ('Old Umask was : ',Umask(Octal(111)));
WRiteln ('New Umask is : ',Octal(111));
end.

39
docs/olinuxex/ex28.pp Normal file
View File

@ -0,0 +1,39 @@
program example28;
{ Program to demonstrate the FStat function. }
uses oldlinux;
var f : text;
i : byte;
info : stat;
begin
{ Make a file }
assign (f,'test.fil');
rewrite (f);
for i:=1 to 10 do writeln (f,'Testline # ',i);
close (f);
{ Do the call on made file. }
if not fstat ('test.fil',info) then
begin
writeln('Fstat failed. Errno : ',linuxerror);
halt (1);
end;
writeln;
writeln ('Result of fstat on file ''test.fil''.');
writeln ('Inode : ',info.ino);
writeln ('Mode : ',info.mode);
writeln ('nlink : ',info.nlink);
writeln ('uid : ',info.uid);
writeln ('gid : ',info.gid);
writeln ('rdev : ',info.rdev);
writeln ('Size : ',info.size);
writeln ('Blksize : ',info.blksze);
writeln ('Blocks : ',info.blocks);
writeln ('atime : ',info.atime);
writeln ('mtime : ',info.mtime);
writeln ('ctime : ',info.ctime);
{ Remove file }
erase (f);
end.

63
docs/olinuxex/ex29.pp Normal file
View File

@ -0,0 +1,63 @@
program example29;
{ Program to demonstrate the LStat function. }
uses oldlinux;
var f : text;
i : byte;
info : stat;
begin
{ Make a file }
assign (f,'test.fil');
rewrite (f);
for i:=1 to 10 do writeln (f,'Testline # ',i);
close (f);
{ Do the call on made file. }
if not fstat ('test.fil',info) then
begin
writeln('Fstat failed. Errno : ',linuxerror);
halt (1);
end;
writeln;
writeln ('Result of fstat on file ''test.fil''.');
writeln ('Inode : ',info.ino);
writeln ('Mode : ',info.mode);
writeln ('nlink : ',info.nlink);
writeln ('uid : ',info.uid);
writeln ('gid : ',info.gid);
writeln ('rdev : ',info.rdev);
writeln ('Size : ',info.size);
writeln ('Blksize : ',info.blksze);
writeln ('Blocks : ',info.blocks);
writeln ('atime : ',info.atime);
writeln ('mtime : ',info.mtime);
writeln ('ctime : ',info.ctime);
If not SymLink ('test.fil','test.lnk') then
writeln ('Link failed ! Errno :',linuxerror);
if not lstat ('test.lnk',info) then
begin
writeln('LStat failed. Errno : ',linuxerror);
halt (1);
end;
writeln;
writeln ('Result of fstat on file ''test.lnk''.');
writeln ('Inode : ',info.ino);
writeln ('Mode : ',info.mode);
writeln ('nlink : ',info.nlink);
writeln ('uid : ',info.uid);
writeln ('gid : ',info.gid);
writeln ('rdev : ',info.rdev);
writeln ('Size : ',info.size);
writeln ('Blksize : ',info.blksze);
writeln ('Blocks : ',info.blocks);
writeln ('atime : ',info.atime);
writeln ('mtime : ',info.mtime);
writeln ('ctime : ',info.ctime);
{ Remove file and link }
erase (f);
unlink ('test.lnk');
end.

13
docs/olinuxex/ex3.pp Normal file
View File

@ -0,0 +1,13 @@
Program Example3;
{ Program to demonstrate the EpochToLocal function. }
Uses oldlinux;
Var Year,month,day,hour,minute,seconds : Word;
begin
EpochToLocal (GetEpochTime,Year,month,day,hour,minute,seconds);
Writeln ('Current date : ',Day:2,'/',Month:2,'/',Year:4);
Writeln ('Current time : ',Hour:2,':',minute:2,':',seconds:2);
end.

33
docs/olinuxex/ex30.pp Normal file
View File

@ -0,0 +1,33 @@
program Example30;
{ Program to demonstrate the FSStat function. }
uses oldlinux;
var s : string;
info : statfs;
begin
writeln ('Info about current partition : ');
s:='.';
while s<>'q' do
begin
if not fsstat (s,info) then
begin
writeln('Fstat failed. Errno : ',linuxerror);
halt (1);
end;
writeln;
writeln ('Result of fsstat on file ''',s,'''.');
writeln ('fstype : ',info.fstype);
writeln ('bsize : ',info.bsize);
writeln ('bfree : ',info.bfree);
writeln ('bavail : ',info.bavail);
writeln ('files : ',info.files);
writeln ('ffree : ',info.ffree);
writeln ('fsid : ',info.fsid);
writeln ('Namelen : ',info.namelen);
write ('Type name of file to do fsstat. (q quits) :');
readln (s)
end;
end.

15
docs/olinuxex/ex31.pp Normal file
View File

@ -0,0 +1,15 @@
program Example31;
{ Program to demonstrate the Dup function. }
uses oldlinux;
var f : text;
begin
if not dup (output,f) then
Writeln ('Dup Failed !');
writeln ('This is written to stdout.');
writeln (f,'This is written to the dup file, and flushed');flush(f);
writeln
end.

22
docs/olinuxex/ex32.pp Normal file
View File

@ -0,0 +1,22 @@
program Example31;
{ Program to demonstrate the Dup function. }
uses oldlinux;
var f : text;
i : longint;
begin
Assign (f,'text.txt');
Rewrite (F);
For i:=1 to 10 do writeln (F,'Line : ',i);
if not dup2 (output,f) then
Writeln ('Dup2 Failed !');
writeln ('This is written to stdout.');
writeln (f,'This is written to the dup file, and flushed');
flush(f);
writeln;
{ Remove file. Comment this if you want to check flushing.}
Unlink ('text.txt');
end.

25
docs/olinuxex/ex33.pp Normal file
View File

@ -0,0 +1,25 @@
Program Example33;
{ Program to demonstrate the Select function. }
Uses oldlinux;
Var FDS : FDSet;
begin
FD_Zero (FDS);
FD_Set (0,FDS);
Writeln ('Press the <ENTER> to continue the program.');
{ Wait until File descriptor 0 (=Input) changes }
Select (1,@FDS,nil,nil,nil);
{ Get rid of <ENTER> in buffer }
readln;
Writeln ('Press <ENTER> key in less than 2 seconds...');
FD_Zero (FDS);
FD_Set (0,FDS);
if Select (1,@FDS,nil,nil,2000)>0 then
Writeln ('Thank you !')
{ FD_ISSET(0,FDS) would be true here. }
else
Writeln ('Too late !');
end.

22
docs/olinuxex/ex34.pp Normal file
View File

@ -0,0 +1,22 @@
Program Example33;
{ Program to demonstrate the SelectText function. }
Uses oldlinux;
Var tv : TimeVal;
begin
Writeln ('Press the <ENTER> to continue the program.');
{ Wait until File descriptor 0 (=Input) changes }
SelectText (Input,nil);
{ Get rid of <ENTER> in buffer }
readln;
Writeln ('Press <ENTER> key in less than 2 seconds...');
tv.sec:=2;
tv.usec:=0;
if SelectText (Input,@tv)>0 then
Writeln ('Thank you !')
else
Writeln ('Too late !');
end.

46
docs/olinuxex/ex35.pp Normal file
View File

@ -0,0 +1,46 @@
Program Example35;
{ Program to demonstrate the
OpenDir,ReadDir, SeekDir and TellDir functions. }
Uses oldlinux;
Var TheDir : PDir;
ADirent : PDirent;
Entry : Longint;
begin
TheDir:=OpenDir('./.');
Repeat
Entry:=TellDir(TheDir);
ADirent:=ReadDir (TheDir);
If ADirent<>Nil then
With ADirent^ do
begin
Writeln ('Entry No : ',Entry);
Writeln ('Inode : ',ino);
Writeln ('Offset : ',off);
Writeln ('Reclen : ',reclen);
Writeln ('Name : ',pchar(@name[0]));
end;
Until ADirent=Nil;
Repeat
Write ('Entry No. you would like to see again (-1 to stop): ');
ReadLn (Entry);
If Entry<>-1 then
begin
SeekDir (TheDir,Entry);
ADirent:=ReadDir (TheDir);
If ADirent<>Nil then
With ADirent^ do
begin
Writeln ('Entry No : ',Entry);
Writeln ('Inode : ',ino);
Writeln ('Offset : ',off);
Writeln ('Reclen : ',reclen);
Writeln ('Name : ',pchar(@name[0]));
end;
end;
Until Entry=-1;
CloseDir (TheDir);
end.

25
docs/olinuxex/ex36.pp Normal file
View File

@ -0,0 +1,25 @@
Program Example36;
{ Program to demonstrate the AssignPipe function. }
Uses oldlinux;
Var pipi,pipo : Text;
s : String;
begin
Writeln ('Assigning Pipes.');
If Not assignpipe(pipi,pipo) then
Writeln('Error assigning pipes !',LinuxError);
Writeln ('Writing to pipe, and flushing.');
Writeln (pipo,'This is a textstring');close(pipo);
Writeln ('Reading from pipe.');
While not eof(pipi) do
begin
Readln (pipi,s);
Writeln ('Read from pipe : ',s);
end;
close (pipi);
writeln ('Closed pipes.');
writeln
end.

35
docs/olinuxex/ex37.pp Normal file
View File

@ -0,0 +1,35 @@
Program Example37;
{ Program to demonstrate the Popen function. }
uses oldlinux;
var f : text;
i : longint;
begin
writeln ('Creating a shell script to which echoes its arguments');
writeln ('and input back to stdout');
assign (f,'test21a');
rewrite (f);
writeln (f,'#!/bin/sh');
writeln (f,'echo this is the child speaking.... ');
writeln (f,'echo got arguments \*"$*"\*');
writeln (f,'cat');
writeln (f,'exit 2');
writeln (f);
close (f);
chmod ('test21a',octal (755));
popen (f,'./test21a arg1 arg2','W');
if linuxerror<>0 then
writeln ('error from POpen : Linuxerror : ', Linuxerror);
for i:=1 to 10 do
writeln (f,'This is written to the pipe, and should appear on stdout.');
Flush(f);
Writeln ('The script exited with status : ',PClose (f));
writeln;
writeln ('Press <return> to remove shell script.');
readln;
assign (f,'test21a');
erase (f)
end.

51
docs/olinuxex/ex38.pp Normal file
View File

@ -0,0 +1,51 @@
Program Example38;
{ Program to demonstrate the AssignStream function. }
Uses oldlinux;
Var Si,So : Text;
S : String;
i : longint;
begin
if not (paramstr(1)='-son') then
begin
Writeln ('Calling son');
Assignstream (Si,So,'./ex38 -son');
if linuxerror<>0 then
begin
writeln ('AssignStream failed !');
halt(1);
end;
Writeln ('Speaking to son');
For i:=1 to 10 do
begin
writeln (so,'Hello son !');
if ioresult<>0 then writeln ('Can''t speak to son...');
end;
For i:=1 to 3 do writeln (so,'Hello chap !');
close (so);
while not eof(si) do
begin
readln (si,s);
writeln ('Father: Son said : ',S);
end;
Writeln ('Stopped conversation');
Close (Si);
Writeln ('Put down phone');
end
Else
begin
Writeln ('This is the son ');
While not eof (input) do
begin
readln (s);
if pos ('Hello son !',S)<>0 then
Writeln ('Hello Dad !')
else
writeln ('Who are you ?');
end;
close (output);
end
end.

9
docs/olinuxex/ex39.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example39;
{ Program to demonstrate the GetDomainName function. }
Uses oldlinux;
begin
Writeln ('Domain name of this machine is : ',GetDomainName);
end.

19
docs/olinuxex/ex4.pp Normal file
View File

@ -0,0 +1,19 @@
Program Example4;
{ Program to demonstrate the LocalToEpoch function. }
Uses oldlinux;
Var year,month,day,hour,minute,second : Word;
begin
Write ('Year : ');readln(Year);
Write ('Month : ');readln(Month);
Write ('Day : ');readln(Day);
Write ('Hour : ');readln(Hour);
Write ('Minute : ');readln(Minute);
Write ('Seonds : ');readln(Second);
Write ('This is : ');
Write (LocalToEpoch(year,month,day,hour,minute,second));
Writeln (' seconds past 00:00 1/1/1980');
end.

9
docs/olinuxex/ex40.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example40;
{ Program to demonstrate the GetHostName function. }
Uses oldlinux;
begin
Writeln ('Name of this machine is : ',GetHostName);
end.

9
docs/olinuxex/ex41.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example41;
{ Program to demonstrate the GetEnv function. }
Uses oldlinux;
begin
Writeln ('Path is : ',Getenv('PATH'));
end.

22
docs/olinuxex/ex42.pp Normal file
View File

@ -0,0 +1,22 @@
Program Example42;
{ Program to demonstrate the SysInfo function. }
Uses oldlinux;
Var Info : TSysinfo;
begin
If SysInfo (Info) then
With info do
begin
Writeln ('Uptime : ',uptime);
Writeln ('Load : ',loads[1],'/',Loads[2],'/',Loads[3]);
Writeln ('Total ram : ',TotalRam div 1024,'Kb.');
Writeln ('Free ram : ',FreeRam div 1024,'Kb.');
Writeln ('Shared ram : ',SharedRam div 1024,'Kb.');
Writeln ('Total swap : ',Totalswap div 1024,'Kb.');
Writeln ('Free swap : ',FreeSwap Div 1024,'Kb.');
Writeln ('No. Processes : ',procs);
end;
end.

20
docs/olinuxex/ex43.pp Normal file
View File

@ -0,0 +1,20 @@
Program Example43;
{ Program to demonstrate the Uname function. }
Uses oldlinux;
Var UN : utsname;
begin
if Uname (UN) then
With UN do
begin
Writeln ('Name : ',pchar(@sysname[0]));
Writeln ('Nodename : ',pchar(@Nodename[0]));
Writeln ('release : ',pchar(@Release[0]));
Writeln ('Version : ',pchar(@Version[0]));
Writeln ('Machine : ',pchar(@Machine[0]));
Writeln ('Domainname : ',pchar(@domainname[0]));
end;
end.

9
docs/olinuxex/ex44.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example44;
{ Program to demonstrate the Octal function. }
Uses oldlinux;
begin
Writeln ('Octal(666) : ',octal(666));
end.

9
docs/olinuxex/ex45.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example45;
{ Program to demonstrate the FExpand function. }
Uses oldlinux;
begin
Writeln ('This program is in : ',FExpand(Paramstr(0)));
end.

9
docs/olinuxex/ex46.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example46;
{ Program to demonstrate the FSearch function. }
Uses oldlinux,strings;
begin
Writeln ('ls is in : ',FSearch ('ls',strpas(Getenv('PATH'))));
end.

12
docs/olinuxex/ex47.pp Normal file
View File

@ -0,0 +1,12 @@
Program Example47;
{ Program to demonstrate the DirName function. }
Uses oldlinux;
Var S : String;
begin
S:=FExpand(Paramstr(0));
Writeln ('This program is in directory : ',Dirname(S));
end.

12
docs/olinuxex/ex48.pp Normal file
View File

@ -0,0 +1,12 @@
Program Example48;
{ Program to demonstrate the BaseName function. }
Uses oldlinux;
Var S : String;
begin
S:=FExpand(Paramstr(0));
Writeln ('This program is called : ',Basename(S,''));
end.

22
docs/olinuxex/ex49.pp Normal file
View File

@ -0,0 +1,22 @@
Program Example49;
{ Program to demonstrate the Glob and GlobFree functions. }
Uses oldlinux;
Var G1,G2 : PGlob;
begin
G1:=Glob ('*');
if LinuxError=0 then
begin
G2:=G1;
Writeln ('Files in this directory : ');
While g2<>Nil do
begin
Writeln (g2^.name);
g2:=g2^.next;
end;
GlobFree (g1);
end;
end.

12
docs/olinuxex/ex5.pp Normal file
View File

@ -0,0 +1,12 @@
Program Example5;
{ Program to demonstrate the GetTime function. }
Uses oldlinux;
Var Hour, Minute, Second : Word;
begin
GetTime (Hour, Minute, Second);
Writeln ('Time : ',Hour:2,':',Minute:2,':',Second:2);
end.

15
docs/olinuxex/ex51.pp Normal file
View File

@ -0,0 +1,15 @@
Program Example51;
{ Program to demonstrate the StringToPPChar function. }
Uses oldlinux;
var P : PPChar;
S : String;
begin
S:='/bin/ls -l -F';
P:=StringToPPChar(S);
Writeln ('Name : ',p^); inc(longint(p),4);
writeln ('Option 1 : ',p^); inc(longint(p),4);
writeln ('Option 2 : ',p^);
end.

11
docs/olinuxex/ex52.pp Normal file
View File

@ -0,0 +1,11 @@
Program Example52;
{ Program to demonstrate the GetFS function. }
Uses oldlinux;
begin
Writeln ('File descriptor of input ',getfs(input));
Writeln ('File descriptor of output ',getfs(output));
Writeln ('File descriptor of stderr ',getfs(stderr));
end.

27
docs/olinuxex/ex53.pp Normal file
View File

@ -0,0 +1,27 @@
Program Example53;
{ Program to demonstrate the S_ISLNK function. }
Uses oldlinux;
Var Info : Stat;
begin
if LStat (paramstr(1),info) then
begin
if S_ISLNK(info.mode) then
Writeln ('File is a link');
if S_ISREG(info.mode) then
Writeln ('File is a regular file');
if S_ISDIR(info.mode) then
Writeln ('File is a directory');
if S_ISCHR(info.mode) then
Writeln ('File is a character device file');
if S_ISBLK(info.mode) then
Writeln ('File is a block device file');
if S_ISFIFO(info.mode) then
Writeln ('File is a named pipe (FIFO)');
if S_ISSOCK(info.mode) then
Writeln ('File is a socket');
end;
end.

15
docs/olinuxex/ex54.pp Normal file
View File

@ -0,0 +1,15 @@
Program Example54;
uses oldlinux;
{ Program to demonstrate the IOCtl function. }
var
tios : Termios;
begin
IOCtl(1,TCGETS,@tios);
WriteLn('Input Flags : $',hexstr(tios.c_iflag,8));
WriteLn('Output Flags : $',hexstr(tios.c_oflag,8));
WriteLn('Line Flags : $',hexstr(tios.c_lflag,8));
WriteLn('Control Flags: $',hexstr(tios.c_cflag,8));
end.

30
docs/olinuxex/ex55.pp Normal file
View File

@ -0,0 +1,30 @@
Program Example55;
uses oldlinux;
{ Program to demonstrate the TCGetAttr/TCSetAttr/CFMakeRaw functions. }
procedure ShowTermios(var tios:Termios);
begin
WriteLn('Input Flags : $',hexstr(tios.c_iflag,8)+#13);
WriteLn('Output Flags : $',hexstr(tios.c_oflag,8));
WriteLn('Line Flags : $',hexstr(tios.c_lflag,8));
WriteLn('Control Flags: $',hexstr(tios.c_cflag,8));
end;
var
oldios,
tios : Termios;
begin
WriteLn('Old attributes:');
TCGetAttr(1,tios);
ShowTermios(tios);
oldios:=tios;
Writeln('Setting raw terminal mode');
CFMakeRaw(tios);
TCSetAttr(1,TCSANOW,tios);
WriteLn('Current attributes:');
TCGetAttr(1,tios);
ShowTermios(tios);
TCSetAttr(1,TCSANOW,oldios);
end.

13
docs/olinuxex/ex56.pp Normal file
View File

@ -0,0 +1,13 @@
program example56;
uses oldlinux;
{ Program to demonstrate the Shell function }
Var S : Longint;
begin
Writeln ('Output of ls -l *.pp');
S:=Shell ('ls -l *.pp');
Writeln ('Command exited wwith status : ',S);
end.

37
docs/olinuxex/ex57.pp Normal file
View File

@ -0,0 +1,37 @@
Program example57;
{ Program to demonstrate the SigAction function.}
{
do a kill -USR1 pid from another terminal to see what happens.
replace pid with the real pid of this program.
You can get this pid by running 'ps'.
}
uses oldlinux;
Var
oa,na : PSigActionRec;
Procedure DoSig(sig : Longint);cdecl;
begin
writeln('Receiving signal: ',sig);
end;
begin
new(na);
new(oa);
na^.Handler.sh:=@DoSig;
na^.Sa_Mask:=0;
na^.Sa_Flags:=0;
na^.Sa_Restorer:=Nil;
SigAction(SigUsr1,na,oa);
if LinuxError<>0 then
begin
writeln('Error: ',linuxerror,'.');
halt(1);
end;
Writeln ('Send USR1 signal or press <ENTER> to exit');
readln;
end.

28
docs/olinuxex/ex58.pp Normal file
View File

@ -0,0 +1,28 @@
Program example58;
{ Program to demonstrate the Signal function.}
{
do a kill -USR1 pid from another terminal to see what happens.
replace pid with the real pid of this program.
You can get this pid by running 'ps'.
}
uses oldlinux;
Procedure DoSig(sig : Longint);cdecl;
begin
writeln('Receiving signal: ',sig);
end;
begin
SigNal(SigUsr1,@DoSig);
if LinuxError<>0 then
begin
writeln('Error: ',linuxerror,'.');
halt(1);
end;
Writeln ('Send USR1 signal or press <ENTER> to exit');
readln;
end.

21
docs/olinuxex/ex59.pp Normal file
View File

@ -0,0 +1,21 @@
Program Example59;
{ Program to demonstrate the Alarm function. }
Uses oldlinux;
Procedure AlarmHandler(Sig : longint);cdecl;
begin
Writeln ('Got to alarm handler');
end;
begin
Writeln('Setting alarm handler');
Signal(SIGALRM,@AlarmHandler);
Writeln ('Scheduling Alarm in 10 seconds');
Alarm(10);
Writeln ('Pausing');
Pause;
Writeln ('Pause returned');
end.

12
docs/olinuxex/ex6.pp Normal file
View File

@ -0,0 +1,12 @@
Program Example6;
{ Program to demonstrate the GetDate function. }
Uses oldlinux;
Var Year, Month, Day : Word;
begin
GetDate (Year, Month, Day);
Writeln ('Date : ',Day:2,'/',Month:2,'/',Year:4);
end.

13
docs/olinuxex/ex60.pp Normal file
View File

@ -0,0 +1,13 @@
Program Example6;
{ Program to demonstrate the GetDateTime function. }
Uses oldlinux;
Var Year, Month, Day, Hour, min, sec : Word;
begin
GetDateTime (Year, Month, Day, Hour, min, sec);
Writeln ('Date : ',Day:2,'/',Month:2,'/',Year:4);
Writeln ('Time : ',Hour:2,':',Min:2,':',Sec:2);
end.

22
docs/olinuxex/ex61.pp Normal file
View File

@ -0,0 +1,22 @@
Program ex61;
{ Example program to demonstrate the CreateShellArgV function }
uses oldlinux;
Var
S: String;
PP : PPchar;
I : longint;
begin
S:='script -a -b -c -d -e fghijk';
PP:=CreateShellArgV(S);
I:=0;
If PP<>Nil then
While PP[i]<>Nil do
begin
Writeln ('Got : "',PP[i],'"');
Inc(i);
end;
end.

28
docs/olinuxex/ex62.pp Normal file
View File

@ -0,0 +1,28 @@
Program Example62;
{ Program to demonstrate the ReadLink function. }
Uses oldlinux;
Var F : Text;
S : String;
begin
Assign (F,'test.txt');
Rewrite (F);
Writeln (F,'This is written to test.txt');
Close(f);
{ new.txt and test.txt are now the same file }
if not SymLink ('test.txt','new.txt') then
writeln ('Error when symlinking !');
S:=ReadLink('new.txt');
If S='' then
Writeln ('Error reading link !')
Else
Writeln ('Link points to : ',S);
{ Now remove links }
If not Unlink ('new.txt') then
Writeln ('Error when unlinking !');
If not Unlink ('test.txt') then
Writeln ('Error when unlinking !');
end.

9
docs/olinuxex/ex63.pp Normal file
View File

@ -0,0 +1,9 @@
Program Example63;
{ Program to demonstrate the FRename function. }
Uses oldlinux;
begin
FRename (paramstr(1),paramstr(2));
end.

36
docs/olinuxex/ex64.pp Normal file
View File

@ -0,0 +1,36 @@
program Example64;
{ Example to demonstrate the SysInfo function }
Uses oldlinux;
Function Mb(L : Longint) : longint;
begin
Mb:=L div (1024*1024);
end;
Var Info : TSysInfo;
D,M,Secs,H : longint;
begin
If Not SysInfo(Info) then
Halt(1);
With Info do
begin
D:=Uptime div (3600*24);
UpTime:=UpTime mod (3600*24);
h:=uptime div 3600;
uptime:=uptime mod 3600;
m:=uptime div 60;
secs:=uptime mod 60;
Writeln('Uptime : ',d,'days, ',h,' hours, ',m,' min, ',secs,' s.');
Writeln('Loads : ',Loads[1],'/',Loads[2],'/',Loads[3]);
Writeln('Total Ram : ',Mb(totalram),'Mb.');
Writeln('Free Ram : ',Mb(freeram),'Mb.');
Writeln('Shared Ram : ',Mb(sharedram),'Mb.');
Writeln('Buffer Ram : ',Mb(bufferram),'Mb.');
Writeln('Total Swap : ',Mb(totalswap),'Mb.');
Writeln('Free Swap : ',Mb(freeswap),'Mb.');
end;
end.

31
docs/olinuxex/ex65.pp Normal file
View File

@ -0,0 +1,31 @@
Program example64;
{ Program to demonstrate the SigRaise function.}
uses oldlinux;
Var
oa,na : PSigActionRec;
Procedure DoSig(sig : Longint);cdecl;
begin
writeln('Receiving signal: ',sig);
end;
begin
new(na);
new(oa);
na^.handler.sh:=@DoSig;
na^.Sa_Mask:=0;
na^.Sa_Flags:=0;
na^.Sa_Restorer:=Nil;
SigAction(SigUsr1,na,oa);
if LinuxError<>0 then
begin
writeln('Error: ',linuxerror,'.');
halt(1);
end;
Writeln('Sending USR1 (',sigusr1,') signal to self.');
SigRaise(sigusr1);
end.

37
docs/olinuxex/ex66.pp Normal file
View File

@ -0,0 +1,37 @@
Program Example66;
{ Program to demonstrate the MMap function. }
Uses oldlinux;
Var S : String;
fd,Len : Longint;
args : tmmapargs;
P : PChar;
begin
S:='This is a string'#0;
Len:=Length(S);
fd:=fdOpen('testfile.txt',Open_wrOnly or open_creat);
If fd=-1 then
Halt(1);
If fdWrite(fd,S[1],Len)=-1 then
Halt(2);
fdClose(fd);
fdOpen('testfile.txt',Open_rdOnly);
if fd=-1 then
Halt(3);
args.address:=0;
args.offset:=0;
args.size:=Len+1;
args.fd:=Fd;
args.flags:=MAP_PRIVATE;
args.prot:=PROT_READ or PROT_WRITE;
P:=Pchar(mmap(args));
If longint(P)=-1 then
Halt(4);
Writeln('Read in memory :',P);
fdclose(fd);
if Not MUnMap(P,Len) Then
Halt(LinuxError);
end.

16
docs/olinuxex/ex67.pp Normal file
View File

@ -0,0 +1,16 @@
Program Example67;
uses oldlinux;
{ Program to demonstrate the FSplit function. }
var
Path,Name,Ext : string;
begin
FSplit(ParamStr(1),Path,Name,Ext);
WriteLn('Split ',ParamStr(1),' in:');
WriteLn('Path : ',Path);
WriteLn('Name : ',Name);
WriteLn('Extension: ',Ext);
end.

11
docs/olinuxex/ex68.pp Normal file
View File

@ -0,0 +1,11 @@
Program Example68;
{ Program to demonstrate the Octal function. }
Uses oldlinux;
begin
Writeln('Mode 777 : ', Octal(777));
Writeln('Mode 644 : ', Octal(644));
Writeln('Mode 755 : ', Octal(755));
end.

27
docs/olinuxex/ex69.pp Normal file
View File

@ -0,0 +1,27 @@
Program Example69;
{ Program to demonstrate the FNMatch function. }
Uses oldlinux;
Procedure TestMatch(Pattern,Name : String);
begin
Write ('"',Name,'" ');
If FNMatch (Pattern,Name) then
Write ('matches')
else
Write ('does not match');
Writeln(' "',Pattern,'".');
end;
begin
TestMatch('*','FileName');
TestMatch('.*','FileName');
TestMatch('*a*','FileName');
TestMatch('?ile*','FileName');
TestMatch('?','FileName');
TestMatch('.?','FileName');
TestMatch('?a*','FileName');
TestMatch('??*me?','FileName');
end.

21
docs/olinuxex/ex7.pp Normal file
View File

@ -0,0 +1,21 @@
Program Example7;
{ Program to demonstrate the Execve function. }
Uses oldlinux, strings;
Const Arg0 : PChar = '/bin/ls';
Arg1 : Pchar = '-l';
Var PP : PPchar;
begin
GetMem (PP,3*SizeOf(Pchar));
PP[0]:=Arg0;
PP[1]:=Arg1;
PP[3]:=Nil;
{ Execute '/bin/ls -l', with current environment }
{ Envp is defined in system.inc }
ExecVe ('/bin/ls',pp,envp);
end.

22
docs/olinuxex/ex70.pp Normal file
View File

@ -0,0 +1,22 @@
Program Example70;
{ Program to demonstrate the StringToPPchar function. }
Uses oldlinux;
Var S : String;
P : PPChar;
I : longint;
begin
// remark whitespace at end.
S:='This is a string with words. ';
P:=StringToPPChar(S);
I:=0;
While P[i]<>Nil do
begin
Writeln('Word ',i,' : ',P[i]);
Inc(I);
end;
FreeMem(P,i*SizeOf(Pchar));
end.

71
docs/olinuxex/ex71.pp Normal file
View File

@ -0,0 +1,71 @@
program TestC{lone};
uses
oldlinux, Errors, crt;
const
Ready : Boolean = false;
aChar : Char = 'a';
function CloneProc( Arg: Pointer ): LongInt; Cdecl;
begin
WriteLn('Hello from the clone ',PChar(Arg));
repeat
Write(aChar);
Select(0,Nil,Nil,Nil,Nil);
until Ready;
WriteLn( 'Clone finished.');
CloneProc := 1;
end;
var
PID : LongInt;
procedure MainProc;
begin
WriteLn('cloned process PID: ', PID );
WriteLn('Press <ESC> to kill ... ' );
repeat
Write('.');
Select(0,Nil,Nil,Nil,Nil);
if KeyPressed then
case ReadKey of
#27: Ready := true;
'a': aChar := 'A';
'A': aChar := 'a';
'b': aChar := 'b';
'B': aChar := 'B';
end;
until Ready;
WriteLn('Ready.');
end;
const
StackSze = 16384;
theFlags = CLONE_VM+CLONE_FS+CLONE_FILES+CLONE_SIGHAND;
aMsg : PChar = 'Oops !';
var
theStack : Pointer;
ExitStat : LongInt;
begin
GetMem(theStack,StackSze);
PID := Clone(@CloneProc,
Pointer( LongInt(theStack)+StackSze),
theFlags,
aMsg);
if PID < 0 then
WriteLn('Error : ', LinuxError, ' when cloning.')
else
begin
MainProc;
case WaitPID(0,@ExitStat,Wait_Untraced or wait_clone) of
-1: WriteLn('error:',LinuxError,'; ',StrError(LinuxError));
0: WriteLn('error:',LinuxError,'; ',StrError(LinuxError));
else
WriteLn('Clone exited with: ',ExitStat shr 8);
end;
end;
FreeMem( theStack, StackSze );
end.

27
docs/olinuxex/ex72.pp Normal file
View File

@ -0,0 +1,27 @@
program example72;
{ Program to demonstrate the NanoSleep function. }
uses oldlinux;
Var
Req,Rem : TimeSpec;
Res : Longint;
begin
With Req do
begin
tv_sec:=10;
tv_nsec:=100;
end;
Write('NanoSleep returned : ');
Flush(Output);
Res:=(NanoSleep(Req,rem));
Writeln(res);
If (res<>0) then
With rem do
begin
Writeln('Remaining seconds : ',tv_sec);
Writeln('Remaining nanoseconds : ',tv_nsec);
end;
end.

20
docs/olinuxex/ex8.pp Normal file
View File

@ -0,0 +1,20 @@
Program Example8;
{ Program to demonstrate the Execv function. }
Uses oldlinux, strings;
Const Arg0 : PChar = '/bin/ls';
Arg1 : Pchar = '-l';
Var PP : PPchar;
begin
GetMem (PP,3*SizeOf(Pchar));
PP[0]:=Arg0;
PP[1]:=Arg1;
PP[3]:=Nil;
{ Execute '/bin/ls -l', with current environment }
Execv ('/bin/ls',pp);
end.

22
docs/olinuxex/ex9.pp Normal file
View File

@ -0,0 +1,22 @@
Program Example9;
{ Program to demonstrate the Execvp function. }
Uses oldlinux, strings;
Const Arg0 : PChar = 'ls';
Arg1 : Pchar = '-l';
Var PP : PPchar;
begin
GetMem (PP,3*SizeOf(Pchar));
PP[0]:=Arg0;
PP[1]:=Arg1;
PP[3]:=Nil;
{ Execute 'ls -l', with current environment. }
{ 'ls' is looked for in PATH environment variable.}
{ Envp is defined in the system unit. }
Execvp ('ls',pp,envp);
end.

2
docs/olinuxex/foot.tex Normal file
View File

@ -0,0 +1,2 @@
\end{verbatim}
\end{FPCList}

3
docs/olinuxex/head.tex Normal file
View File

@ -0,0 +1,3 @@
\begin{FPCList}
\item[Example]
\begin{verbatim}

8
docs/olinuxex/newex Normal file
View File

@ -0,0 +1,8 @@
#!/bin/sh
if [ -e ex${1}.pp ]; then
mv ex${1}.pp ex${1}.pp.orig
fi
sed -e s/Example/Example$1/ -e s/\\\*\\\*\\\*/$2/ <template.pp >ex${1}.pp
echo "ex${1}.pp contains an example of the $2 function." >>README
joe ex${1}.pp
ppc386 ex${1}.pp && ex${1}

167
docs/olinuxex/serial.pp Normal file
View File

@ -0,0 +1,167 @@
program Terminal_test;
{******************************************************************************
* Really really budget attempt at Serial IO with Linux and FPC.
* My first FPC program. Re-built and refined on 12/6/99
* Written under X windows with nedit 5.0.2 (Not a bad editor)
* This SHOULD work without including the CRT Unit, However it has problems
* With reading from the keyboard unless the CRT unit is included ?!?
*
* Designed to talk to an RS485 Buss, using RTS as the Tx/Rx Select Pin
* No Copyrights or warrantys.
* Let me know if it's of some use to you.
* Brad Campbell (bcampbel@omen.net.au)
******************************************************************************}
uses oldlinux, Crt;
Const DTR : Cardinal = TIOCM_DTR;
Const RTS : Cardinal = TIOCM_RTS;
Var FD : Longint;
InChr : String[1];
InStr : String[80];
Quit : Boolean;
InLen, Loop : Integer;
tios : Termios;
fds : FDSet;
Procedure DumpFlags;
begin
IOCtl(FD,TIOCMGET,@tios);
Writeln('Input Flags : $',hexstr(tios.c_iflag,8));
Writeln('Output Flags : $',hexstr(tios.c_oflag,8));
Writeln('Local Flags : $',hexstr(tios.c_lflag,8));
Writeln('Control Flags : $',hexstr(tios.c_cflag,8));
End;
Procedure RS485RX;
Begin
IOCtl(FD,TIOCMBIS,@RTS);
End;
Procedure RS485TX;
Begin
IOCtl(FD,TIOCMBIC,@RTS);
End;
Procedure DtrOn;
Begin
IOCtl(FD,TIOCMBIS,@DTR);
End;
Procedure DtrOff;
Begin
IOCtl(FD,TIOCMBIC,@DTR);
End;
Procedure SendToRemote(OutString : String);
Begin
Rs485TX; {Switch Buss to Transmit}
if fdWrite(FD,OutString[1],Length(OutString)) <> Length(OutString) then
Writeln('Write Error');
{Write(OutString);} {Uncomment for Local Echo}
TCDrain(FD); {Block Program until all data sent out port has left UART}
RS485RX; {Switch Buss back to Recieve}
End;
{ Not limited to baud selection I have here, it's just all I use }
Procedure SetBaudrate;
Var NewBaud : LongInt;
Begin
Writeln;
Writeln('New Baud Rate (300,1200,2400,4800, 9600,19200,38400) ? ');
Readln(NewBaud);
Case NewBaud of
300 : NewBaud := B300;
1200 : NewBaud := B1200;
2400 : NewBaud := B2400;
4800 : NewBaud := B4800;
9600 : NewBaud := B9600;
19200 : NewBaud := B19200;
38400 : NewBaud := B38400;
Else
Begin
Writeln('Invalid Baud Rate. Baud not Changed');
Writeln;
NewBaud := 0;
End;
End;
{ Sets Baud Rate Here }
If NewBaud <> 0 then
Begin
IOCtl(FD,TCGETS,@tios); {Get IOCTL TermIOS Settings}
CFSetOSpeed(tios,NewBaud); {Set Relevant Bits}
IOCtl(FD,TCSETS,@tios); {Put them back with IOCTL}
Writeln('New Baudrate ',HexStr(NewBaud,2),' Set');
{This line just prints what the constant equates to for
Information Only}
End;
End;
Begin
Quit := False;
Writeln('Brad''s Dumb Terminal Test prog v0.2');
Writeln('Ctrl-C to exit program');
Writeln('Ctrl-D to set Baud Rate');
Writeln('Uses /dev/ttyS0 (Com 1)');
Writeln;
FD:=fdOpen('/dev/ttyS0',Open_RdWr or Open_NonBlock or Open_Excl);
{Open Port Read/Write, Not Blocking and Exclusive}
if FD > 0 then Begin
Writeln('Port Open');
FLock(FD,LOCK_EX);
{Attempt to Lock the port, I'm not sure this is strictly nessecary}
Writeln('Port Locked');
{Set Comms Parms, 9600 Baud, 8 Data Bits, Reciever Enabled,
Modem Control Lines Ignored}
{Read man 3 termios for More options}
IOCtl(FD,TCGETS,@tios);
tios.c_cflag := B9600 Or CS8 Or CREAD Or CLOCAL;
tios.c_lflag := 0;
tios.c_oflag := 0;
tios.c_iflag := 0;
IOCtl(FD,TCSETS,@tios);
DumpFlags; {This is for information only and dumps the contents of
the Termios registers}
Repeat
FD_Zero (FDS); {Clear File Descriptors Array}
FD_Set (0,FDS); {Input from Keyboard}
FD_SET (FD,FDS); {Input from Serial Port}
Select(FD+1,@FDS,nil,nil,nil); {Will Wait for input from above}
If FD_ISSET(0,FDS) then {Has there been a key pressed ?}
If fdRead(0,InChr[1],80) <> 0 then
Begin
if InChr[1] = Chr(3) then Quit := True;
if InChr[1] = Chr(4) then SetBaudRate;
SendToRemote(InChr[1]);
End;
If FD_ISSET(FD,FDS) then {Have we data waiting in UART ? }
Begin
InLen := fdRead(FD,InStr[1],80);
If InLen > 0 then
For Loop := 1 to Inlen do
Write(InStr[Loop]);
End;
Until Quit = True; {Were Outa Here}
FLock(FD,LOCK_UN); {Unlock Port}
fdClose(FD); {Close Port}
End
Else Writeln('Open Port Error'); {We failed to Open/Lock the UART}
End.

View File

@ -0,0 +1,8 @@
Program Example;
{ Program to demonstrate the *** function. }
Uses oldlinux;
begin
end.