* system unit rename for 1.1 branch

This commit is contained in:
peter 2000-10-15 08:19:48 +00:00
parent eb3ca9c51d
commit 8a381b9ec3
19 changed files with 2703 additions and 2682 deletions

View File

@ -122,13 +122,16 @@ PROCINC=$(RTL)/$(CPU_TARGET)
UNIXINC=$(RTL)/unix
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=sysbsd
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=sysbsd
# Use new graph unit ?
# NEWGRAPH=YES
# Use LibGGI ?
@ -232,8 +235,6 @@ INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
# Post Settings
#####################################################################
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
@ -1289,22 +1290,22 @@ cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
# System Units (System, Objpas, Strings)
#
$(SYSTEMPPU) : sysbsd.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg sysbsd.pp $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
linux$(PPUEXT) : $(UNIXINC)/linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMPPU) \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMUNIT)$(PPUEXT) \
$(UNIXINC)/linsysca.inc
@ -1313,13 +1314,13 @@ linux$(PPUEXT) : $(UNIXINC)/linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/
#
dos$(PPUEXT) : $(UNIXINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : $(UNIXINC)/crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : $(UNIXINC)/crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : $(UNIXINC)/printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
printer$(PPUEXT) : $(UNIXINC)/printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
@ -1346,24 +1347,24 @@ gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT)
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units
#
sockets$(PPUEXT) : $(UNIXINC)/sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
errors$(PPUEXT) : $(UNIXINC)/errors.pp strings$(PPUEXT) $(SYSTEMPPU)
errors$(PPUEXT) : $(UNIXINC)/errors.pp strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
ipc$(PPUEXT) : $(UNIXINC)/ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
ipc$(PPUEXT) : $(UNIXINC)/ipc.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)

View File

@ -45,13 +45,16 @@ PROCINC=$(RTL)/$(CPU_TARGET)
UNIXINC=$(RTL)/unix
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=sysbsd
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=sysbsd
# Use new graph unit ?
# NEWGRAPH=YES
# Use LibGGI ?
@ -63,8 +66,6 @@ endif
[postsettings]
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
@ -101,22 +102,22 @@ cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
# System Units (System, Objpas, Strings)
#
$(SYSTEMPPU) : sysbsd.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg sysbsd.pp $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
linux$(PPUEXT) : $(UNIXINC)/linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMPPU) \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMUNIT)$(PPUEXT) \
$(UNIXINC)/linsysca.inc
@ -125,13 +126,13 @@ linux$(PPUEXT) : $(UNIXINC)/linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/
#
dos$(PPUEXT) : $(UNIXINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : $(UNIXINC)/crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : $(UNIXINC)/crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : $(UNIXINC)/printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
printer$(PPUEXT) : $(UNIXINC)/printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
@ -158,24 +159,24 @@ gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT)
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units
#
sockets$(PPUEXT) : $(UNIXINC)/sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
errors$(PPUEXT) : $(UNIXINC)/errors.pp strings$(PPUEXT) $(SYSTEMPPU)
errors$(PPUEXT) : $(UNIXINC)/errors.pp strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
ipc$(PPUEXT) : $(UNIXINC)/ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
ipc$(PPUEXT) : $(UNIXINC)/ipc.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)

View File

@ -1,137 +1 @@
{
$Id$
This file is part of the Free Pascal run time librar~y.
Copyright (c) 2000 by Marco van de Voort
member of the Free Pascal development team.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{ These things are set in the makefile, }
{ But you can override them here.}
{ If you use an aout system, set the conditional AOUT}
{ $Define AOUT}
Unit SysBSD;
Interface
{$I sysunixh.inc}
Implementation
{$I sysunix.inc}
{
$Log$
Revision 1.2 2000-09-18 13:42:35 marco
* FreeBSD support into 1.1
Revision 1.1.2.1 2000/09/16 11:19:08 marco
* Moved files from BSD to FreeBSD directory, with some small changes
Revision 1.1.2.4 2000/09/16 11:10:43 marco
* Introduced using sysunix and sysunixh
Revision 1.1.2.3 2000/09/10 16:12:40 marco
The rearrangement to linux for
Revision 1.1.2.2 2000/08/05 18:33:29 peter
* paramstr(0) fix for linux 2.0 kernels
Revision 1.1.2.1 2000/07/14 07:33:15 michael
+ Fixed do_open call. Directory checking must not be performed
Revision 1.1 2000/07/13 06:30:54 michael
+ Initial import
Revision 1.49 2000/07/08 18:02:39 peter
* do_open checks for directory, if directory then ioerror 2
Revision 1.48 2000/06/30 22:14:03 peter
* removed obsolete crtlib code
* support EINTR for read/write to restart the syscall
Revision 1.47 2000/05/11 17:55:13 peter
* changed order of fpustate checking to first check the more
specific states
Revision 1.46 2000/05/08 14:27:36 peter
* released newsignal
* newsignal gives now better backtraces using the sigcontext eip/ebp
fields
Revision 1.45 2000/04/16 16:07:58 marco
* BSD fixes
Revision 1.44 2000/04/14 13:04:53 marco
* Merged bsd/syslinux.pp and 1.43 linux/syslinux.pp to this file with ifdefs
Revision 1.43 2000/04/07 14:56:36 peter
* switch to direct asm if not correctfldcw defined
Revision 1.42 2000/03/31 23:26:32 pierre
* FPU needs reset for all SIGFPE even from integer division by zero
Revision 1.41 2000/03/31 23:21:19 pierre
* multiple exception handling works
(for linux only if syslinux is compiled with -dnewsignal)
Revision 1.40 2000/03/31 13:24:28 jonas
* signal handling using sigaction when compiled with -dnewsignal
(allows multiple signals to be received in one run)
Revision 1.39 2000/03/25 12:28:37 peter
* patch for getdir from Pierre
Revision 1.38 2000/03/23 15:24:18 peter
* remove handle check for do_close
Revision 1.37 2000/02/09 16:59:32 peter
* truncated log
Revision 1.36 2000/02/09 12:17:51 peter
* moved halt to system.inc
* syslinux doesn't use direct asm anymore
Revision 1.35 2000/02/08 11:47:09 peter
* paramstr(0) support
Revision 1.34 2000/01/20 23:38:02 peter
* support fm_inout as stdoutput for assign(f,'');rewrite(f,1); becuase
rewrite opens always with filemode 2
Revision 1.33 2000/01/16 22:25:38 peter
* check handle for file closing
Revision 1.32 2000/01/07 16:41:41 daniel
* copyright 2000
Revision 1.31 2000/01/07 16:32:28 daniel
* copyright 2000 added
Revision 1.30 1999/12/01 22:57:31 peter
* cmdline support
Revision 1.29 1999/11/06 14:39:12 peter
* truncated log
Revision 1.28 1999/10/28 09:50:06 peter
* use mmap instead of brk
Revision 1.27 1999/09/10 15:40:35 peter
* fixed do_open flags to be > $100, becuase filemode can be upto 255
Revision 1.26 1999/09/08 16:14:43 peter
* pointer fixes
Revision 1.25 1999/07/28 23:18:36 peter
* closedir fixes, which now disposes the pdir itself
}
{$i system}

140
rtl/freebsd/system.pp Normal file
View File

@ -0,0 +1,140 @@
{
$Id$
This file is part of the Free Pascal run time librar~y.
Copyright (c) 2000 by Marco van de Voort
member of the Free Pascal development team.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{ These things are set in the makefile, }
{ But you can override them here.}
{ If you use an aout system, set the conditional AOUT}
{ $Define AOUT}
Unit {$ifdef VER1_0}SysBSD{$else}System{$endif};
Interface
{$I sysunixh.inc}
Implementation
{$I sysunix.inc}
{
$Log$
Revision 1.1 2000-10-15 08:19:48 peter
* system unit rename for 1.1 branch
Revision 1.2 2000/09/18 13:42:35 marco
* FreeBSD support into 1.1
Revision 1.1.2.1 2000/09/16 11:19:08 marco
* Moved files from BSD to FreeBSD directory, with some small changes
Revision 1.1.2.4 2000/09/16 11:10:43 marco
* Introduced using sysunix and sysunixh
Revision 1.1.2.3 2000/09/10 16:12:40 marco
The rearrangement to linux for
Revision 1.1.2.2 2000/08/05 18:33:29 peter
* paramstr(0) fix for linux 2.0 kernels
Revision 1.1.2.1 2000/07/14 07:33:15 michael
+ Fixed do_open call. Directory checking must not be performed
Revision 1.1 2000/07/13 06:30:54 michael
+ Initial import
Revision 1.49 2000/07/08 18:02:39 peter
* do_open checks for directory, if directory then ioerror 2
Revision 1.48 2000/06/30 22:14:03 peter
* removed obsolete crtlib code
* support EINTR for read/write to restart the syscall
Revision 1.47 2000/05/11 17:55:13 peter
* changed order of fpustate checking to first check the more
specific states
Revision 1.46 2000/05/08 14:27:36 peter
* released newsignal
* newsignal gives now better backtraces using the sigcontext eip/ebp
fields
Revision 1.45 2000/04/16 16:07:58 marco
* BSD fixes
Revision 1.44 2000/04/14 13:04:53 marco
* Merged bsd/syslinux.pp and 1.43 linux/syslinux.pp to this file with ifdefs
Revision 1.43 2000/04/07 14:56:36 peter
* switch to direct asm if not correctfldcw defined
Revision 1.42 2000/03/31 23:26:32 pierre
* FPU needs reset for all SIGFPE even from integer division by zero
Revision 1.41 2000/03/31 23:21:19 pierre
* multiple exception handling works
(for linux only if syslinux is compiled with -dnewsignal)
Revision 1.40 2000/03/31 13:24:28 jonas
* signal handling using sigaction when compiled with -dnewsignal
(allows multiple signals to be received in one run)
Revision 1.39 2000/03/25 12:28:37 peter
* patch for getdir from Pierre
Revision 1.38 2000/03/23 15:24:18 peter
* remove handle check for do_close
Revision 1.37 2000/02/09 16:59:32 peter
* truncated log
Revision 1.36 2000/02/09 12:17:51 peter
* moved halt to system.inc
* syslinux doesn't use direct asm anymore
Revision 1.35 2000/02/08 11:47:09 peter
* paramstr(0) support
Revision 1.34 2000/01/20 23:38:02 peter
* support fm_inout as stdoutput for assign(f,'');rewrite(f,1); becuase
rewrite opens always with filemode 2
Revision 1.33 2000/01/16 22:25:38 peter
* check handle for file closing
Revision 1.32 2000/01/07 16:41:41 daniel
* copyright 2000
Revision 1.31 2000/01/07 16:32:28 daniel
* copyright 2000 added
Revision 1.30 1999/12/01 22:57:31 peter
* cmdline support
Revision 1.29 1999/11/06 14:39:12 peter
* truncated log
Revision 1.28 1999/10/28 09:50:06 peter
* use mmap instead of brk
Revision 1.27 1999/09/10 15:40:35 peter
* fixed do_open flags to be > $100, becuase filemode can be upto 255
Revision 1.26 1999/09/08 16:14:43 peter
* pointer fixes
Revision 1.25 1999/07/28 23:18:36 peter
* closedir fixes, which now disposes the pdir itself
}

View File

@ -75,34 +75,34 @@ prt0$(OEXT) : prt0.as
# Base Units (System, strings, os-dependent-base-unit)
#
$(SYSTEMPPU) : system.pp $(SYSDEPS)
system$(PPUEXT) : system.pp $(SYSDEPS)
$(COMPILER) -Us -Sg system.pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc system$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
$(SYSTEMPPU)
system$(PPUEXT)
#
# System Dependent Units
#
go32$(PPUEXT) : go32.pp objpas$(PPUEXT) $(SYSTEMPPU)
go32$(PPUEXT) : go32.pp objpas$(PPUEXT) system$(PPUEXT)
#
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc \
go32$(PPUEXT) strings$(PPUEXT) $(SYSTEMPPU)
go32$(PPUEXT) strings$(PPUEXT) system$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc go32$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc go32$(PPUEXT) system$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc system$(PPUEXT)
printer$(PPUEXT) : printer.pp $(SYSTEMPPU)
printer$(PPUEXT) : printer.pp system$(PPUEXT)
#
# Delphi Compatible Units
@ -122,17 +122,17 @@ math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT)
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp system$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) system$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp system$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp system$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
#
# Other system-dependent RTL Units
#
msmouse$(PPUEXT) : msmouse.pp $(SYSTEMPPU)
msmouse$(PPUEXT) : msmouse.pp system$(PPUEXT)

View File

@ -126,9 +126,6 @@ UNITPREFIX=rtl
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=system
# Insert exception handler in system unit
ifdef EXCEPTIONS_IN_SYSTEM
override FPCOPT+=-dEXCEPTIONS_IN_SYSTEM
@ -195,7 +192,7 @@ endif
# Targets
override LOADEROBJECTS+=prt0 exceptn fpu
override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings go32 dpmiexcp initc ports profile dxeload emu387 dos crt objects printer graph sysutils math typinfo cpu mmx getopts heaptrc lineinfo msmouse charset varutils
override UNITOBJECTS+=system objpas strings go32 dpmiexcp initc ports profile dxeload emu387 dos crt objects printer graph sysutils math typinfo cpu mmx getopts heaptrc lineinfo msmouse charset varutils
override RSTOBJECTS+=math varutils
# Clean
@ -230,8 +227,6 @@ INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
# Post Settings
#####################################################################
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
@ -1281,48 +1276,48 @@ prt0$(OEXT) : v2prt0.as
# System Units (System, Objpas, Strings)
#
$(SYSTEMPPU) : system.pp $(SYSDEPS)
system$(PPUEXT) : system.pp $(SYSDEPS)
$(COMPILER) -Us -Sg system.pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc system$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
$(SYSTEMPPU)
system$(PPUEXT)
#
# System Dependent Units
#
go32$(PPUEXT) : go32.pp $(SYSTEMPPU)
go32$(PPUEXT) : go32.pp system$(PPUEXT)
dpmiexcp$(PPUEXT) : dpmiexcp.pp exceptn$(OEXT) $(SYSTEMPPU)
dpmiexcp$(PPUEXT) : dpmiexcp.pp exceptn$(OEXT) system$(PPUEXT)
$(COMPILER) -Sg dpmiexcp.pp $(REDIR)
initc$(PPUEXT) : initc.pp $(SYSTEMPPU)
initc$(PPUEXT) : initc.pp system$(PPUEXT)
profile$(PPUEXT) : profile.pp dpmiexcp$(PPUEXT) go32$(PPUEXT)
dxeload$(PPUEXT) : dxeload.pp $(SYSTEMPPU)
dxeload$(PPUEXT) : dxeload.pp system$(PPUEXT)
emu387$(PPUEXT) : emu387.pp fpu$(OEXT) strings$(PPUEXT) dxeload$(PPUEXT) \
dpmiexcp$(PPUEXT)
ports$(PPUEXT) : ports.pp objpas$(PPUEXT) $(SYSTEMPPU)
ports$(PPUEXT) : ports.pp objpas$(PPUEXT) system$(PPUEXT)
#
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc \
go32$(PPUEXT) strings$(PPUEXT) $(SYSTEMPPU)
go32$(PPUEXT) strings$(PPUEXT) system$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc go32$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc go32$(PPUEXT) system$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc system$(PPUEXT)
printer$(PPUEXT) : printer.pp $(SYSTEMPPU)
printer$(PPUEXT) : printer.pp system$(PPUEXT)
#
# Graph
@ -1331,7 +1326,7 @@ printer$(PPUEXT) : printer.pp $(SYSTEMPPU)
include $(GRAPHDIR)/makefile.inc
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
graph$(PPUEXT) : graph.pp go32$(PPUEXT) ports$(PPUEXT) $(SYSTEMPPU) \
graph$(PPUEXT) : graph.pp go32$(PPUEXT) ports$(PPUEXT) system$(PPUEXT) \
$(GRAPHINCDEPS) vesa.inc vesah.inc dpmi.inc
$(COMPILER) -I$(GRAPHDIR) graph.pp $(REDIR)
@ -1357,21 +1352,21 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp system$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) system$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp system$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp system$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp system$(PPUEXT)
charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMPPU)
charset$(PPUEXT) : $(INC)/charset.pp system$(PPUEXT)
#
# Other system-dependent RTL Units
#
msmouse$(PPUEXT) : msmouse.pp $(SYSTEMPPU)
msmouse$(PPUEXT) : msmouse.pp system$(PPUEXT)

View File

@ -4,7 +4,7 @@
[targets]
loaders=prt0 exceptn fpu
units=$(SYSTEMUNIT) objpas strings \
units=system objpas strings \
go32 dpmiexcp initc ports profile dxeload emu387 \
dos crt objects printer graph \
sysutils math typinfo \
@ -39,9 +39,6 @@ UNITPREFIX=rtl
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=system
# Insert exception handler in system unit
ifdef EXCEPTIONS_IN_SYSTEM
override FPCOPT+=-dEXCEPTIONS_IN_SYSTEM
@ -53,8 +50,6 @@ override FPCOPT+=-dNO_EXCEPTIONS_IN_SYSTEM
endif
[postsettings]
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
@ -85,48 +80,48 @@ prt0$(OEXT) : v2prt0.as
# System Units (System, Objpas, Strings)
#
$(SYSTEMPPU) : system.pp $(SYSDEPS)
system$(PPUEXT) : system.pp $(SYSDEPS)
$(COMPILER) -Us -Sg system.pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc system$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
$(SYSTEMPPU)
system$(PPUEXT)
#
# System Dependent Units
#
go32$(PPUEXT) : go32.pp $(SYSTEMPPU)
go32$(PPUEXT) : go32.pp system$(PPUEXT)
dpmiexcp$(PPUEXT) : dpmiexcp.pp exceptn$(OEXT) $(SYSTEMPPU)
dpmiexcp$(PPUEXT) : dpmiexcp.pp exceptn$(OEXT) system$(PPUEXT)
$(COMPILER) -Sg dpmiexcp.pp $(REDIR)
initc$(PPUEXT) : initc.pp $(SYSTEMPPU)
initc$(PPUEXT) : initc.pp system$(PPUEXT)
profile$(PPUEXT) : profile.pp dpmiexcp$(PPUEXT) go32$(PPUEXT)
dxeload$(PPUEXT) : dxeload.pp $(SYSTEMPPU)
dxeload$(PPUEXT) : dxeload.pp system$(PPUEXT)
emu387$(PPUEXT) : emu387.pp fpu$(OEXT) strings$(PPUEXT) dxeload$(PPUEXT) \
dpmiexcp$(PPUEXT)
ports$(PPUEXT) : ports.pp objpas$(PPUEXT) $(SYSTEMPPU)
ports$(PPUEXT) : ports.pp objpas$(PPUEXT) system$(PPUEXT)
#
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc \
go32$(PPUEXT) strings$(PPUEXT) $(SYSTEMPPU)
go32$(PPUEXT) strings$(PPUEXT) system$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc go32$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc go32$(PPUEXT) system$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc system$(PPUEXT)
printer$(PPUEXT) : printer.pp $(SYSTEMPPU)
printer$(PPUEXT) : printer.pp system$(PPUEXT)
#
# Graph
@ -135,7 +130,7 @@ printer$(PPUEXT) : printer.pp $(SYSTEMPPU)
include $(GRAPHDIR)/makefile.inc
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
graph$(PPUEXT) : graph.pp go32$(PPUEXT) ports$(PPUEXT) $(SYSTEMPPU) \
graph$(PPUEXT) : graph.pp go32$(PPUEXT) ports$(PPUEXT) system$(PPUEXT) \
$(GRAPHINCDEPS) vesa.inc vesah.inc dpmi.inc
$(COMPILER) -I$(GRAPHDIR) graph.pp $(REDIR)
@ -161,21 +156,21 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp system$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) system$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp system$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp system$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp system$(PPUEXT)
charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMPPU)
charset$(PPUEXT) : $(INC)/charset.pp system$(PPUEXT)
#
# Other system-dependent RTL Units
#
msmouse$(PPUEXT) : msmouse.pp $(SYSTEMPPU)
msmouse$(PPUEXT) : msmouse.pp system$(PPUEXT)

View File

@ -123,13 +123,16 @@ UNIXINC=$(RTL)/unix
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=syslinux
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=syslinux
# Use new graph unit ?
# NEWGRAPH=YES
# Use LibGGI ?
@ -233,9 +236,7 @@ INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
# Post Settings
#####################################################################
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# Get the $(SYSTEMUNIT) independent include file names.
# This will set the following variables :
# SYSINCNAMES
include $(INC)/makefile.inc
@ -247,7 +248,7 @@ SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
include $(PROCINC)/makefile.cpu
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
# Put system unit dependencies together.
# Put $(SYSTEMUNIT) unit dependencies together.
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
#####################################################################
@ -1295,25 +1296,25 @@ gprt21$(OEXT) : $(CPU_TARGET)/gprt0.as
#
# System Units (System, Objpas, Strings)
# $(SYSTEMUNIT) Units ($(SYSTEMUNIT), Objpas, Strings)
#
$(SYSTEMPPU) : syslinux.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg syslinux.pp $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
# $(SYSTEMUNIT) Dependent Units
#
linux$(PPUEXT) : linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMPPU) \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMUNIT)$(PPUEXT) \
$(UNIXINC)/linsysca.inc
ports$(PPUEXT) : ports.pp linux$(PPUEXT) objpas$(PPUEXT)
@ -1328,13 +1329,13 @@ dynlibs$(PPUEXT) : $(INC)/dynlibs.pp $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
@ -1342,11 +1343,11 @@ printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
include $(GRAPHDIR)/makefile.inc
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
graph$(PPUEXT) : graph.pp linux$(PPUEXT) $(SYSTEMPPU) \
graph$(PPUEXT) : graph.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(GRAPHINCDEPS) $(UNIXINC)/graph16.inc
$(COMPILER) -I$(GRAPHDIR) $(UNIXINC)/graph.pp $(REDIR)
ggigraph$(PPUEXT) : $(UNIXINC)/ggigraph.pp linux$(PPUEXT) $(SYSTEMPPU) \
ggigraph$(PPUEXT) : $(UNIXINC)/ggigraph.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(GRAPHINCDEPS)
$(COMPILER) -I$(GRAPHDIR) $(UNIXINC)/ggigraph.pp $(REDIR)
@ -1372,27 +1373,27 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
$(COMPILER) -I$(OBJPASDIR) $(UNIXINC)/varutils.pp $(REDIR)
#
# Other system-independent RTL Units
# Other $(SYSTEMUNIT)-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units
# Other $(SYSTEMUNIT)-dependent RTL Units
#
sockets$(PPUEXT) : sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMPPU)
errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)

View File

@ -45,13 +45,16 @@ UNIXINC=$(RTL)/unix
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=syslinux
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=syslinux
# Use new graph unit ?
# NEWGRAPH=YES
# Use LibGGI ?
@ -62,9 +65,7 @@ USELIBGGI=NO
endif
[postsettings]
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# Get the $(SYSTEMUNIT) independent include file names.
# This will set the following variables :
# SYSINCNAMES
include $(INC)/makefile.inc
@ -76,7 +77,7 @@ SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
include $(PROCINC)/makefile.cpu
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
# Put system unit dependencies together.
# Put $(SYSTEMUNIT) unit dependencies together.
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
@ -105,25 +106,25 @@ gprt21$(OEXT) : $(CPU_TARGET)/gprt0.as
#
# System Units (System, Objpas, Strings)
# $(SYSTEMUNIT) Units ($(SYSTEMUNIT), Objpas, Strings)
#
$(SYSTEMPPU) : syslinux.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg syslinux.pp $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
# $(SYSTEMUNIT) Dependent Units
#
linux$(PPUEXT) : linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMPPU) \
syscalls.inc systypes.inc sysconst.inc $(UNIXINC)/timezone.inc $(SYSTEMUNIT)$(PPUEXT) \
$(UNIXINC)/linsysca.inc
ports$(PPUEXT) : ports.pp linux$(PPUEXT) objpas$(PPUEXT)
@ -138,13 +139,13 @@ dynlibs$(PPUEXT) : $(INC)/dynlibs.pp $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp $(UNIXINC)/objinc.inc $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
@ -152,11 +153,11 @@ printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU)
include $(GRAPHDIR)/makefile.inc
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
graph$(PPUEXT) : graph.pp linux$(PPUEXT) $(SYSTEMPPU) \
graph$(PPUEXT) : graph.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(GRAPHINCDEPS) $(UNIXINC)/graph16.inc
$(COMPILER) -I$(GRAPHDIR) $(UNIXINC)/graph.pp $(REDIR)
ggigraph$(PPUEXT) : $(UNIXINC)/ggigraph.pp linux$(PPUEXT) $(SYSTEMPPU) \
ggigraph$(PPUEXT) : $(UNIXINC)/ggigraph.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(GRAPHINCDEPS)
$(COMPILER) -I$(GRAPHDIR) $(UNIXINC)/ggigraph.pp $(REDIR)
@ -182,27 +183,27 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
$(COMPILER) -I$(OBJPASDIR) $(UNIXINC)/varutils.pp $(REDIR)
#
# Other system-independent RTL Units
# Other $(SYSTEMUNIT)-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units
# Other $(SYSTEMUNIT)-dependent RTL Units
#
sockets$(PPUEXT) : sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \
linux$(PPUEXT) $(SYSTEMPPU)
linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMPPU)
errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)

View File

@ -1,51 +1 @@
{
$Id$
This file is part of the Free Pascal run time library.
Copyright (c) 1999-2000 by Michael Van Canneyt,
member of the Free Pascal development team.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{ These things are set in the makefile, }
{ But you can override them here.}
{ If you use an aout system, set the conditional AOUT}
{ $Define AOUT}
Unit SysLinux;
Interface
{$I sysunixh.inc}
Implementation
{$I sysunix.inc}
{
$Log$
Revision 1.7 2000-09-18 13:14:50 marco
* Global Linux +bsd to (rtl/freebsd rtl/unix rtl/linux structure)
Revision 1.6 2000/09/11 13:48:08 marco
* FreeBSD support and removal of old sighandler
Revision 1.5 2000/08/13 08:43:45 peter
* don't check for directory in do_open (merged)
Revision 1.4 2000/08/05 18:33:51 peter
* paramstr(0) fix for linux 2.0 kernels (merged)
Revision 1.3 2000/07/14 10:33:10 michael
+ Conditionals fixed
Revision 1.2 2000/07/13 11:33:49 michael
+ removed logs
}
{$i system.pp}

54
rtl/linux/system.pp Normal file
View File

@ -0,0 +1,54 @@
{
$Id$
This file is part of the Free Pascal run time library.
Copyright (c) 1999-2000 by Michael Van Canneyt,
member of the Free Pascal development team.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{ These things are set in the makefile, }
{ But you can override them here.}
{ If you use an aout system, set the conditional AOUT}
{ $Define AOUT}
Unit {$ifdef VER1_0}Syslinux{$else}System{$endif};
Interface
{$I sysunixh.inc}
Implementation
{$I sysunix.inc}
{
$Log$
Revision 1.1 2000-10-15 08:19:49 peter
* system unit rename for 1.1 branch
Revision 1.7 2000/09/18 13:14:50 marco
* Global Linux +bsd to (rtl/freebsd rtl/unix rtl/linux structure)
Revision 1.6 2000/09/11 13:48:08 marco
* FreeBSD support and removal of old sighandler
Revision 1.5 2000/08/13 08:43:45 peter
* don't check for directory in do_open (merged)
Revision 1.4 2000/08/05 18:33:51 peter
* paramstr(0) fix for linux 2.0 kernels (merged)
Revision 1.3 2000/07/14 10:33:10 michael
+ Conditionals fixed
Revision 1.2 2000/07/13 11:33:49 michael
+ removed logs
}

View File

@ -122,12 +122,15 @@ PROCINC=$(RTL)/$(CPU_TARGET)
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=syslinux
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=sysos2
#####################################################################
# FPCDIR Setting
#####################################################################
@ -220,8 +223,6 @@ INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall
# Post Settings
#####################################################################
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
@ -1273,54 +1274,54 @@ vpath %.pp $(INC) $(PROCINC)
# Base Units (System, strings, os-dependent-base-unit)
#
$(SYSTEMPPU) : sysos2.pas $(SYSDEPS)
$(COMPILER) -Us -Sg sysos2.pas $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pas $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pas $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
ports$(PPUEXT) : ports.pas objpas$(PPUEXT) $(SYSTEMPPU)
ports$(PPUEXT) : ports.pas objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
doscalls$(PPUEXT) : doscalls.pas strings$(PPUEXT) objects$(PPUEXT) $(SYSTEMPPU)
doscalls$(PPUEXT) : doscalls.pas strings$(PPUEXT) objects$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
kbdcalls$(PPUEXT) : kbdcalls.pas $(SYSTEMPPU)
kbdcalls$(PPUEXT) : kbdcalls.pas $(SYSTEMUNIT)$(PPUEXT)
moucalls$(PPUEXT) : moucalls.pas $(SYSTEMPPU)
moucalls$(PPUEXT) : moucalls.pas $(SYSTEMUNIT)$(PPUEXT)
moncalls$(PPUEXT) : moncalls.pas strings$(PPUEXT) $(SYSTEMPPU)
moncalls$(PPUEXT) : moncalls.pas strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
os2def$(PPUEXT) : os2def.pas $(SYSTEMPPU)
os2def$(PPUEXT) : os2def.pas $(SYSTEMUNIT)$(PPUEXT)
pmwin$(PPUEXT) : pmwin.pas os2def$(PPUEXT) $(SYSTEMPPU)
pmwin$(PPUEXT) : pmwin.pas os2def$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
pmbitmap$(PPUEXT) : pmbitmap.pas $(SYSTEMPPU)
pmbitmap$(PPUEXT) : pmbitmap.pas $(SYSTEMUNIT)$(PPUEXT)
pmgpi$(PPUEXT) : pmgpi.pas pmbitmap$(PPUEXT) $(SYSTEMPPU)
pmgpi$(PPUEXT) : pmgpi.pas pmbitmap$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
dive$(PPUEXT) : dive.pas os2def$(PPUEXT) pmwin$(PPUEXT) $(SYSTEMPPU)
dive$(PPUEXT) : dive.pas os2def$(PPUEXT) pmwin$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp doscalls$(PPUEXT) $(SYSTEMPPU)
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp doscalls$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pas $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
doscalls$(PPUEXT) $(SYSTEMPPU)
doscalls$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMPPU)
crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : printer.pas $(INC)/textrec.inc $(SYSTEMPPU)
printer$(PPUEXT) : printer.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
#graph$(PPUEXT) : graph.pp
@ -1346,18 +1347,18 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
# Other system-independent RTL Units
#
ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMPPU)
ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units

View File

@ -35,17 +35,17 @@ PROCINC=$(RTL)/$(CPU_TARGET)
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=syslinux
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
# Define Go32v2 Units
SYSTEMUNIT=sysos2
[postsettings]
SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT))
# Get the system independent include file names.
# This will set the following variables :
# SYSINCNAMES
@ -78,54 +78,54 @@ vpath %.pp $(INC) $(PROCINC)
# Base Units (System, strings, os-dependent-base-unit)
#
$(SYSTEMPPU) : sysos2.pas $(SYSDEPS)
$(COMPILER) -Us -Sg sysos2.pas $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pas $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pas $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc \
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc \
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
ports$(PPUEXT) : ports.pas objpas$(PPUEXT) $(SYSTEMPPU)
ports$(PPUEXT) : ports.pas objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
doscalls$(PPUEXT) : doscalls.pas strings$(PPUEXT) objects$(PPUEXT) $(SYSTEMPPU)
doscalls$(PPUEXT) : doscalls.pas strings$(PPUEXT) objects$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
kbdcalls$(PPUEXT) : kbdcalls.pas $(SYSTEMPPU)
kbdcalls$(PPUEXT) : kbdcalls.pas $(SYSTEMUNIT)$(PPUEXT)
moucalls$(PPUEXT) : moucalls.pas $(SYSTEMPPU)
moucalls$(PPUEXT) : moucalls.pas $(SYSTEMUNIT)$(PPUEXT)
moncalls$(PPUEXT) : moncalls.pas strings$(PPUEXT) $(SYSTEMPPU)
moncalls$(PPUEXT) : moncalls.pas strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
os2def$(PPUEXT) : os2def.pas $(SYSTEMPPU)
os2def$(PPUEXT) : os2def.pas $(SYSTEMUNIT)$(PPUEXT)
pmwin$(PPUEXT) : pmwin.pas os2def$(PPUEXT) $(SYSTEMPPU)
pmwin$(PPUEXT) : pmwin.pas os2def$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
pmbitmap$(PPUEXT) : pmbitmap.pas $(SYSTEMPPU)
pmbitmap$(PPUEXT) : pmbitmap.pas $(SYSTEMUNIT)$(PPUEXT)
pmgpi$(PPUEXT) : pmgpi.pas pmbitmap$(PPUEXT) $(SYSTEMPPU)
pmgpi$(PPUEXT) : pmgpi.pas pmbitmap$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
dive$(PPUEXT) : dive.pas os2def$(PPUEXT) pmwin$(PPUEXT) $(SYSTEMPPU)
dive$(PPUEXT) : dive.pas os2def$(PPUEXT) pmwin$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp doscalls$(PPUEXT) $(SYSTEMPPU)
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp doscalls$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
#
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pas $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
doscalls$(PPUEXT) $(SYSTEMPPU)
doscalls$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMPPU)
crt$(PPUEXT) : crt.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMUNIT)$(PPUEXT)
printer$(PPUEXT) : printer.pas $(INC)/textrec.inc $(SYSTEMPPU)
printer$(PPUEXT) : printer.pas $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT)
#graph$(PPUEXT) : graph.pp
@ -151,18 +151,18 @@ varutils$(PPUEXT) : $(OBJPASDIR)/cvarutil.inc $(OBJPASDIR)/varutils.inc \
# Other system-independent RTL Units
#
ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMPPU)
ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units

View File

@ -1,820 +1 @@
{****************************************************************************
Free Pascal -- OS/2 runtime library
Copyright (c) 1999-2000 by Florian Klaempfl
Copyright (c) 1999-2000 by Daniel Mantione
Free Pascal is distributed under the GNU Public License v2. So is this unit.
The GNU Public License requires you to distribute the source code of this
unit with any product that uses it. We grant you an exception to this, and
that is, when you compile a program with the Free Pascal Compiler, you do not
need to ship source code with that program, AS LONG AS YOU ARE USING
UNMODIFIED CODE! If you modify this code, you MUST change the next line:
<This an official, unmodified Free Pascal source code file.>
Send us your modified files, we can work together if you want!
Free Pascal is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Library GNU General Public License for more details.
You should have received a copy of the Library GNU General Public License
along with Free Pascal; see the file COPYING.LIB. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
****************************************************************************}
unit sysos2;
{Changelog:
People:
DM - Daniel Mantione
Date: Description of change: Changed by:
- First released version 0.1. DM
Coding style:
My coding style is a bit unusual for Pascal. Nevertheless I friendly ask
you to try to make your changes not look all to different. In general,
set your IDE to use tab characters, optimal fill on and a tabsize of 4.}
interface
{Link the startup code.}
{$l prt1.oo2}
{$I SYSTEMH.INC}
{$I heaph.inc}
type Tos=(osDOS,osOS2,osDPMI);
var os_mode:Tos;
first_meg:pointer;
type Psysthreadib=^Tsysthreadib;
Pthreadinfoblock=^Tthreadinfoblock;
Pprocessinfoblock=^Tprocessinfoblock;
Tbytearray=array[0..$ffff] of byte;
Pbytearray=^Tbytearray;
Tsysthreadib=record
tid,
priority,
version:longint;
MCcount,
MCforceflag:word;
end;
Tthreadinfoblock=record
pexchain,
stack,
stacklimit:pointer;
tib2:Psysthreadib;
version,
ordinal:longint;
end;
Tprocessinfoblock=record
pid,
parentpid,
hmte:longint;
cmd,
env:Pbytearray;
flstatus,
ttype:longint;
end;
const UnusedHandle=$ffff;
StdInputHandle=0;
StdOutputHandle=1;
StdErrorHandle=2;
FileNameCaseSensitive : boolean = false;
var
{ C-compatible arguments and environment }
argc : longint;external name '_argc';
argv : ppchar;external name '_argv';
envp : ppchar;external name '_environ';
implementation
{$I SYSTEM.INC}
procedure DosGetInfoBlocks (var Atib: PThreadInfoBlock;
var Apib: PProcessInfoBlock); cdecl;
external 'DOSCALLS' index 312;
function DosSetRelMaxFH (var ReqCount, CurMaxFH: longint): longint; cdecl;
external 'DOSCALLS' index 382;
{This is the correct way to call external assembler procedures.}
procedure syscall; external name '___SYSCALL';
{***************************************************************************
Runtime error checking related routines.
***************************************************************************}
{$S-}
procedure st1(stack_size:longint);[public,alias: 'STACKCHECK'];
begin
{ called when trying to get local stack }
{ if the compiler directive $S is set }
{$ASMMODE DIRECT}
asm
movl stack_size,%ebx
movl %esp,%eax
subl %ebx,%eax
{$ifdef SYSTEMDEBUG}
movl U_SYSOS2_LOWESTSTACK,%ebx
cmpl %eax,%ebx
jb Lis_not_lowest
movl %eax,U_SYSOS2_LOWESTSTACK
Lis_not_lowest:
{$endif SYSTEMDEBUG}
cmpb $2,U_SYSOS2_OS_MODE
jne Lrunning_in_dos
movl U_SYSOS2_STACKBOTTOM,%ebx
jmp Lrunning_in_os2
Lrunning_in_dos:
movl __heap_brk,%ebx
Lrunning_in_os2:
cmpl %eax,%ebx
jae Lshort_on_stack
leave
ret $4
Lshort_on_stack:
end ['EAX','EBX'];
{$ASMMODE ATT}
{ this needs a local variable }
{ so the function called itself !! }
{ Writeln('low in stack ');}
HandleError(202);
end;
{no stack check in system }
{****************************************************************************
Miscellaneous related routines.
****************************************************************************}
{$asmmode intel}
procedure system_exit; assembler;
asm
mov ah, 04ch
mov al, byte ptr exitcode
call syscall
end;
{$asmmode att}
{$asmmode direct}
function paramcount:longint;assembler;
asm
movl _argc,%eax
decl %eax
end ['EAX'];
function paramstr(l:longint):string;
function args:pointer;assembler;
asm
movl _argv,%eax
end ['EAX'];
var p:^Pchar;
begin
if (l>=0) and (l<=paramcount) then
begin
p:=args;
paramstr:=strpas(p[l]);
end
else paramstr:='';
end;
{$asmmode att}
procedure randomize;
var hl:longint;
begin
asm
movb $0x2c,%ah
call syscall
movw %cx,-4(%ebp)
movw %dx,-2(%ebp)
end;
randseed:=hl;
end;
{****************************************************************************
Heap management releated routines.
****************************************************************************}
{ this function allows to extend the heap by calling
syscall $7f00 resizes the brk area}
function sbrk(size:longint):longint; assembler;
asm
movl size,%edx
movw $0x7f00,%ax
call syscall
end;
{$ASMMODE direct}
function getheapstart:pointer;assembler;
asm
movl __heap_base,%eax
end ['EAX'];
function getheapsize:longint;assembler;
asm
movl HEAPSIZE,%eax
end ['EAX'];
{$ASMMODE ATT}
{$i heap.inc}
{****************************************************************************
Low Level File Routines
****************************************************************************}
procedure allowslash(p:Pchar);
{Allow slash as backslash.}
var i:longint;
begin
for i:=0 to strlen(p) do
if p[i]='/' then p[i]:='\';
end;
procedure do_close(h:longint);
begin
{ Only three standard handles under real OS/2 }
if (h > 4) or
(os_MODE = osOS2) and (h > 2) then
begin
asm
movb $0x3e,%ah
movl h,%ebx
call syscall
end;
end;
end;
procedure do_erase(p:Pchar);
begin
allowslash(p);
asm
movl P,%edx
movb $0x41,%ah
call syscall
jnc .LERASE1
movw %ax,inoutres;
.LERASE1:
end;
end;
procedure do_rename(p1,p2:Pchar);
begin
allowslash(p1);
allowslash(p2);
asm
movl P1, %edx
movl P2, %edi
movb $0x56,%ah
call syscall
jnc .LRENAME1
movw %ax,inoutres;
.LRENAME1:
end;
end;
function do_read(h,addr,len:longint):longint; assembler;
asm
movl len,%ecx
movl addr,%edx
movl h,%ebx
movb $0x3f,%ah
call syscall
jnc .LDOSREAD1
movw %ax,inoutres;
xorl %eax,%eax
.LDOSREAD1:
end;
function do_write(h,addr,len:longint) : longint; assembler;
asm
movl len,%ecx
movl addr,%edx
movl h,%ebx
movb $0x40,%ah
call syscall
jnc .LDOSWRITE1
movw %ax,inoutres;
.LDOSWRITE1:
end;
function do_filepos(handle:longint): longint; assembler;
asm
movw $0x4201,%ax
movl handle,%ebx
xorl %edx,%edx
call syscall
jnc .LDOSFILEPOS
movw %ax,inoutres;
xorl %eax,%eax
.LDOSFILEPOS:
end;
procedure do_seek(handle,pos:longint); assembler;
asm
movw $0x4200,%ax
movl handle,%ebx
movl pos,%edx
call syscall
jnc .LDOSSEEK1
movw %ax,inoutres;
.LDOSSEEK1:
end;
function do_seekend(handle:longint):longint; assembler;
asm
movw $0x4202,%ax
movl handle,%ebx
xorl %edx,%edx
call syscall
jnc .Lset_at_end1
movw %ax,inoutres;
xorl %eax,%eax
.Lset_at_end1:
end;
function do_filesize(handle:longint):longint;
var aktfilepos:longint;
begin
aktfilepos:=do_filepos(handle);
do_filesize:=do_seekend(handle);
do_seek(handle,aktfilepos);
end;
procedure do_truncate(handle,pos:longint); assembler;
asm
(* DOS function 40h isn't safe for this according to EMX documentation
movl $0x4200,%eax
movl 8(%ebp),%ebx
movl 12(%ebp),%edx
call syscall
jc .LTruncate1
movl 8(%ebp),%ebx
movl 12(%ebp),%edx
movl %ebp,%edx
xorl %ecx,%ecx
movb $0x40,%ah
call syscall
*)
movl $0x7F25,%eax
movl Handle,%ebx
movl Pos,%edx
call syscall
inc %eax
movl %ecx, %eax
jnz .LTruncate1
(* File position is undefined after truncation, move to the end. *)
movl $0x4202,%eax
movl Handle,%ebx
movl $0,%edx
call syscall
jnc .LTruncate2
.LTruncate1:
movw %ax,inoutres;
.LTruncate2:
end;
const
FileHandleCount: longint = 20;
function Increase_File_Handle_Count: boolean;
var Err: word;
L1, L2: longint;
begin
if os_mode = osOS2 then
begin
L1 := 10;
if DosSetRelMaxFH (L1, L2) <> 0 then
Increase_File_Handle_Count := false
else
if L2 > FileHandleCount then
begin
FileHandleCount := L2;
Increase_File_Handle_Count := true;
end
else
Increase_File_Handle_Count := false;
end
else
begin
Inc (FileHandleCount, 10);
Err := 0;
asm
movl $0x6700, %eax
movl FileHandleCount, %ebx
call syscall
jnc .LIncFHandles
movw %ax, Err
.LIncFHandles:
end;
if Err <> 0 then
begin
Increase_File_Handle_Count := false;
Dec (FileHandleCount, 10);
end
else
Increase_File_Handle_Count := true;
end;
end;
procedure do_open(var f;p:pchar;flags:longint);
{
filerec and textrec have both handle and mode as the first items so
they could use the same routine for opening/creating.
when (flags and $100) the file will be append
when (flags and $1000) the file will be truncate/rewritten
when (flags and $10000) there is no check for close (needed for textfiles)
}
var Action: longint;
begin
allowslash(p);
{ close first if opened }
if ((flags and $10000)=0) then
begin
case filerec(f).mode of
fminput,fmoutput,fminout : Do_Close(filerec(f).handle);
fmclosed:;
else
begin
inoutres:=102; {not assigned}
exit;
end;
end;
end;
{ reset file handle }
filerec(f).handle := UnusedHandle;
Action := 0;
{ convert filemode to filerec modes }
case (flags and 3) of
0 : filerec(f).mode:=fminput;
1 : filerec(f).mode:=fmoutput;
2 : filerec(f).mode:=fminout;
end;
if (flags and $1000)<>0 then
Action := $50000; (* Create / replace *)
{ empty name is special }
if p[0]=#0 then
begin
case FileRec(f).mode of
fminput :
FileRec(f).Handle:=StdInputHandle;
fminout, { this is set by rewrite }
fmoutput :
FileRec(f).Handle:=StdOutputHandle;
fmappend :
begin
FileRec(f).Handle:=StdOutputHandle;
FileRec(f).mode:=fmoutput; {fool fmappend}
end;
end;
exit;
end;
Action := Action or (Flags and $FF);
(* DenyAll if sharing not specified. *)
if Flags and 112 = 0 then
Action := Action or 16;
asm
movl $0x7f2b, %eax
movl Action, %ecx
movl p, %edx
call syscall
cmpl $0xffffffff, %eax
jnz .LOPEN1
movw %cx, InOutRes
movw UnusedHandle, %ax
.LOPEN1:
movl f,%edx
movw %ax,(%edx)
end;
if (InOutRes = 4) and Increase_File_Handle_Count then
(* Trying again after increasing amount of file handles *)
asm
movl $0x7f2b, %eax
movl Action, %ecx
movl p, %edx
call syscall
cmpl $0xffffffff, %eax
jnz .LOPEN2
movw %cx, InOutRes
movw UnusedHandle, %ax
.LOPEN2:
movl f,%edx
movw %ax,(%edx)
end;
{ for systems that have more handles }
if FileRec (F).Handle > FileHandleCount then
FileHandleCount := FileRec (F).Handle;
if (flags and $100)<>0 then
begin
do_seekend(filerec(f).handle);
FileRec (F).Mode := fmOutput; {fool fmappend}
end;
end;
{$ASMMODE INTEL}
function do_isdevice (Handle: longint): boolean; assembler;
(*
var HT, Attr: longint;
begin
if os_mode = osOS2 then
begin
if DosQueryHType (Handle, HT, Attr) <> 0 then HT := 1;
end
else
*)
asm
mov ebx, Handle
mov eax, 4400h
call syscall
mov eax, 1
jc @IsDevEnd
test edx, 80h
jnz @IsDevEnd
dec eax
@IsDevEnd:
end;
{$ASMMODE ATT}
{*****************************************************************************
UnTyped File Handling
*****************************************************************************}
{$i file.inc}
{*****************************************************************************
Typed File Handling
*****************************************************************************}
{$i typefile.inc}
{*****************************************************************************
Text File Handling
*****************************************************************************}
{$DEFINE EOF_CTRLZ}
{$i text.inc}
{****************************************************************************
Directory related routines.
****************************************************************************}
{*****************************************************************************
Directory Handling
*****************************************************************************}
procedure dosdir(func:byte;const s:string);
var buffer:array[0..255] of char;
begin
move(s[1],buffer,length(s));
buffer[length(s)]:=#0;
allowslash(Pchar(@buffer));
asm
leal buffer,%edx
movb func,%ah
call syscall
jnc .LDOS_DIRS1
movw %ax,inoutres;
.LDOS_DIRS1:
end;
end;
procedure mkdir(const s : string);
begin
DosDir($39,s);
end;
procedure rmdir(const s : string);
begin
DosDir($3a,s);
end;
procedure chdir(const s : string);
begin
DosDir($3b,s);
end;
procedure getdir(drivenr : byte;var dir : shortstring);
{Written by Michael Van Canneyt.}
var temp:array[0..255] of char;
sof:Pchar;
i:byte;
begin
sof:=pchar(@dir[4]);
{ dir[1..3] will contain '[drivenr]:\', but is not }
{ supplied by DOS, so we let dos string start at }
{ dir[4] }
{ Get dir from drivenr : 0=default, 1=A etc... }
asm
movb drivenr,%dl
movl sof,%esi
mov $0x47,%ah
call syscall
end;
{ Now Dir should be filled with directory in ASCIIZ, }
{ starting from dir[4] }
dir[0]:=#3;
dir[2]:=':';
dir[3]:='\';
i:=4;
{Conversion to Pascal string }
while (dir[i]<>#0) do
begin
{ convert path name to DOS }
if dir[i]='/' then
dir[i]:='\';
dir[0]:=char(i);
inc(i);
end;
{ upcase the string (FPC function) }
if not (FileNameCaseSensitive) then dir:=upcase(dir);
if drivenr<>0 then { Drive was supplied. We know it }
dir[1]:=char(65+drivenr-1)
else
begin
{ We need to get the current drive from DOS function 19H }
{ because the drive was the default, which can be unknown }
asm
movb $0x19,%ah
call syscall
addb $65,%al
movb %al,i
end;
dir[1]:=char(i);
end;
end;
{****************************************************************************
System unit initialization.
****************************************************************************}
function GetFileHandleCount: longint;
var L1, L2: longint;
begin
L1 := 0; (* Don't change the amount, just check. *)
if DosSetRelMaxFH (L1, L2) <> 0 then GetFileHandleCount := 50
else GetFileHandleCount := L2;
end;
var pib:Pprocessinfoblock;
tib:Pthreadinfoblock;
begin
{Determine the operating system we are running on.}
asm
movl $0,os_mode
movw $0x7f0a,%ax
call syscall
testw $512,%bx {Bit 9 is OS/2 flag.}
setnzb os_mode
testw $4096,%bx
jz .LnoRSX
movl $2,os_mode
.LnoRSX:
end;
{$ASMMODE DIRECT}
{Enable the brk area by initializing it with the initial heap size.}
asm
movw $0x7f01,%ax
movl HEAPSIZE,%edx
addl __heap_base,%edx
call ___SYSCALL
cmpl $-1,%eax
jnz Lheapok
pushl $204
{call RUNERROR$$WORD}
Lheapok:
end;
{$ASMMODE ATT}
{Now request, if we are running under DOS,
read-access to the first meg. of memory.}
if os_mode in [osDOS,osDPMI] then
asm
movw $0x7f13,%ax
xorl %ebx,%ebx
movl $0xfff,%ecx
xorl %edx,%edx
call syscall
movl %eax,first_meg
end
else
begin
first_meg := nil;
(* Initialize the amount of file handles *)
FileHandleCount := GetFileHandleCount;
end;
{At 0.9.2, case for enumeration does not work.}
case os_mode of
osDOS:
stackbottom:=0; {In DOS mode, heap_brk is also the
stack bottom.}
osOS2:
begin
dosgetinfoblocks(tib,pib);
stackbottom:=longint(tib^.stack);
end;
osDPMI:
stackbottom:=0; {Not sure how to get it, but seems to be
always zero.}
end;
exitproc:=nil;
{Initialize the heap.}
initheap;
{ ... and exceptions }
InitExceptions;
{ to test stack depth }
loweststack:=maxlongint;
OpenStdIO(Input,fmInput,StdInputHandle);
OpenStdIO(Output,fmOutput,StdOutputHandle);
OpenStdIO(StdOut,fmOutput,StdOutputHandle);
OpenStdIO(StdErr,fmOutput,StdErrorHandle);
{ no I/O-Error }
inoutres:=0;
end.
{
$Log$
Revision 1.3 2000-09-29 21:49:41 jonas
* removed warnings
Revision 1.2 2000/07/14 10:33:11 michael
+ Conditionals fixed
Revision 1.1 2000/07/13 06:31:07 michael
+ Initial import
}
{$i system.pas}

825
rtl/os2/system.pas Normal file
View File

@ -0,0 +1,825 @@
{
$Id$
****************************************************************************
Free Pascal -- OS/2 runtime library
Copyright (c) 1999-2000 by Florian Klaempfl
Copyright (c) 1999-2000 by Daniel Mantione
Free Pascal is distributed under the GNU Public License v2. So is this unit.
The GNU Public License requires you to distribute the source code of this
unit with any product that uses it. We grant you an exception to this, and
that is, when you compile a program with the Free Pascal Compiler, you do not
need to ship source code with that program, AS LONG AS YOU ARE USING
UNMODIFIED CODE! If you modify this code, you MUST change the next line:
<This an official, unmodified Free Pascal source code file.>
Send us your modified files, we can work together if you want!
Free Pascal is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Library GNU General Public License for more details.
You should have received a copy of the Library GNU General Public License
along with Free Pascal; see the file COPYING.LIB. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
****************************************************************************}
unit sysos2;
{Changelog:
People:
DM - Daniel Mantione
Date: Description of change: Changed by:
- First released version 0.1. DM
Coding style:
My coding style is a bit unusual for Pascal. Nevertheless I friendly ask
you to try to make your changes not look all to different. In general,
set your IDE to use tab characters, optimal fill on and a tabsize of 4.}
interface
{Link the startup code.}
{$l prt1.oo2}
{$I SYSTEMH.INC}
{$I heaph.inc}
type Tos=(osDOS,osOS2,osDPMI);
var os_mode:Tos;
first_meg:pointer;
type Psysthreadib=^Tsysthreadib;
Pthreadinfoblock=^Tthreadinfoblock;
Pprocessinfoblock=^Tprocessinfoblock;
Tbytearray=array[0..$ffff] of byte;
Pbytearray=^Tbytearray;
Tsysthreadib=record
tid,
priority,
version:longint;
MCcount,
MCforceflag:word;
end;
Tthreadinfoblock=record
pexchain,
stack,
stacklimit:pointer;
tib2:Psysthreadib;
version,
ordinal:longint;
end;
Tprocessinfoblock=record
pid,
parentpid,
hmte:longint;
cmd,
env:Pbytearray;
flstatus,
ttype:longint;
end;
const UnusedHandle=$ffff;
StdInputHandle=0;
StdOutputHandle=1;
StdErrorHandle=2;
FileNameCaseSensitive : boolean = false;
var
{ C-compatible arguments and environment }
argc : longint;external name '_argc';
argv : ppchar;external name '_argv';
envp : ppchar;external name '_environ';
implementation
{$I SYSTEM.INC}
procedure DosGetInfoBlocks (var Atib: PThreadInfoBlock;
var Apib: PProcessInfoBlock); cdecl;
external 'DOSCALLS' index 312;
function DosSetRelMaxFH (var ReqCount, CurMaxFH: longint): longint; cdecl;
external 'DOSCALLS' index 382;
{This is the correct way to call external assembler procedures.}
procedure syscall; external name '___SYSCALL';
{***************************************************************************
Runtime error checking related routines.
***************************************************************************}
{$S-}
procedure st1(stack_size:longint);[public,alias: 'STACKCHECK'];
begin
{ called when trying to get local stack }
{ if the compiler directive $S is set }
{$ASMMODE DIRECT}
asm
movl stack_size,%ebx
movl %esp,%eax
subl %ebx,%eax
{$ifdef SYSTEMDEBUG}
movl U_SYSOS2_LOWESTSTACK,%ebx
cmpl %eax,%ebx
jb Lis_not_lowest
movl %eax,U_SYSOS2_LOWESTSTACK
Lis_not_lowest:
{$endif SYSTEMDEBUG}
cmpb $2,U_SYSOS2_OS_MODE
jne Lrunning_in_dos
movl U_SYSOS2_STACKBOTTOM,%ebx
jmp Lrunning_in_os2
Lrunning_in_dos:
movl __heap_brk,%ebx
Lrunning_in_os2:
cmpl %eax,%ebx
jae Lshort_on_stack
leave
ret $4
Lshort_on_stack:
end ['EAX','EBX'];
{$ASMMODE ATT}
{ this needs a local variable }
{ so the function called itself !! }
{ Writeln('low in stack ');}
HandleError(202);
end;
{no stack check in system }
{****************************************************************************
Miscellaneous related routines.
****************************************************************************}
{$asmmode intel}
procedure system_exit; assembler;
asm
mov ah, 04ch
mov al, byte ptr exitcode
call syscall
end;
{$asmmode att}
{$asmmode direct}
function paramcount:longint;assembler;
asm
movl _argc,%eax
decl %eax
end ['EAX'];
function paramstr(l:longint):string;
function args:pointer;assembler;
asm
movl _argv,%eax
end ['EAX'];
var p:^Pchar;
begin
if (l>=0) and (l<=paramcount) then
begin
p:=args;
paramstr:=strpas(p[l]);
end
else paramstr:='';
end;
{$asmmode att}
procedure randomize;
var hl:longint;
begin
asm
movb $0x2c,%ah
call syscall
movw %cx,-4(%ebp)
movw %dx,-2(%ebp)
end;
randseed:=hl;
end;
{****************************************************************************
Heap management releated routines.
****************************************************************************}
{ this function allows to extend the heap by calling
syscall $7f00 resizes the brk area}
function sbrk(size:longint):longint; assembler;
asm
movl size,%edx
movw $0x7f00,%ax
call syscall
end;
{$ASMMODE direct}
function getheapstart:pointer;assembler;
asm
movl __heap_base,%eax
end ['EAX'];
function getheapsize:longint;assembler;
asm
movl HEAPSIZE,%eax
end ['EAX'];
{$ASMMODE ATT}
{$i heap.inc}
{****************************************************************************
Low Level File Routines
****************************************************************************}
procedure allowslash(p:Pchar);
{Allow slash as backslash.}
var i:longint;
begin
for i:=0 to strlen(p) do
if p[i]='/' then p[i]:='\';
end;
procedure do_close(h:longint);
begin
{ Only three standard handles under real OS/2 }
if (h > 4) or
(os_MODE = osOS2) and (h > 2) then
begin
asm
movb $0x3e,%ah
movl h,%ebx
call syscall
end;
end;
end;
procedure do_erase(p:Pchar);
begin
allowslash(p);
asm
movl P,%edx
movb $0x41,%ah
call syscall
jnc .LERASE1
movw %ax,inoutres;
.LERASE1:
end;
end;
procedure do_rename(p1,p2:Pchar);
begin
allowslash(p1);
allowslash(p2);
asm
movl P1, %edx
movl P2, %edi
movb $0x56,%ah
call syscall
jnc .LRENAME1
movw %ax,inoutres;
.LRENAME1:
end;
end;
function do_read(h,addr,len:longint):longint; assembler;
asm
movl len,%ecx
movl addr,%edx
movl h,%ebx
movb $0x3f,%ah
call syscall
jnc .LDOSREAD1
movw %ax,inoutres;
xorl %eax,%eax
.LDOSREAD1:
end;
function do_write(h,addr,len:longint) : longint; assembler;
asm
movl len,%ecx
movl addr,%edx
movl h,%ebx
movb $0x40,%ah
call syscall
jnc .LDOSWRITE1
movw %ax,inoutres;
.LDOSWRITE1:
end;
function do_filepos(handle:longint): longint; assembler;
asm
movw $0x4201,%ax
movl handle,%ebx
xorl %edx,%edx
call syscall
jnc .LDOSFILEPOS
movw %ax,inoutres;
xorl %eax,%eax
.LDOSFILEPOS:
end;
procedure do_seek(handle,pos:longint); assembler;
asm
movw $0x4200,%ax
movl handle,%ebx
movl pos,%edx
call syscall
jnc .LDOSSEEK1
movw %ax,inoutres;
.LDOSSEEK1:
end;
function do_seekend(handle:longint):longint; assembler;
asm
movw $0x4202,%ax
movl handle,%ebx
xorl %edx,%edx
call syscall
jnc .Lset_at_end1
movw %ax,inoutres;
xorl %eax,%eax
.Lset_at_end1:
end;
function do_filesize(handle:longint):longint;
var aktfilepos:longint;
begin
aktfilepos:=do_filepos(handle);
do_filesize:=do_seekend(handle);
do_seek(handle,aktfilepos);
end;
procedure do_truncate(handle,pos:longint); assembler;
asm
(* DOS function 40h isn't safe for this according to EMX documentation
movl $0x4200,%eax
movl 8(%ebp),%ebx
movl 12(%ebp),%edx
call syscall
jc .LTruncate1
movl 8(%ebp),%ebx
movl 12(%ebp),%edx
movl %ebp,%edx
xorl %ecx,%ecx
movb $0x40,%ah
call syscall
*)
movl $0x7F25,%eax
movl Handle,%ebx
movl Pos,%edx
call syscall
inc %eax
movl %ecx, %eax
jnz .LTruncate1
(* File position is undefined after truncation, move to the end. *)
movl $0x4202,%eax
movl Handle,%ebx
movl $0,%edx
call syscall
jnc .LTruncate2
.LTruncate1:
movw %ax,inoutres;
.LTruncate2:
end;
const
FileHandleCount: longint = 20;
function Increase_File_Handle_Count: boolean;
var Err: word;
L1, L2: longint;
begin
if os_mode = osOS2 then
begin
L1 := 10;
if DosSetRelMaxFH (L1, L2) <> 0 then
Increase_File_Handle_Count := false
else
if L2 > FileHandleCount then
begin
FileHandleCount := L2;
Increase_File_Handle_Count := true;
end
else
Increase_File_Handle_Count := false;
end
else
begin
Inc (FileHandleCount, 10);
Err := 0;
asm
movl $0x6700, %eax
movl FileHandleCount, %ebx
call syscall
jnc .LIncFHandles
movw %ax, Err
.LIncFHandles:
end;
if Err <> 0 then
begin
Increase_File_Handle_Count := false;
Dec (FileHandleCount, 10);
end
else
Increase_File_Handle_Count := true;
end;
end;
procedure do_open(var f;p:pchar;flags:longint);
{
filerec and textrec have both handle and mode as the first items so
they could use the same routine for opening/creating.
when (flags and $100) the file will be append
when (flags and $1000) the file will be truncate/rewritten
when (flags and $10000) there is no check for close (needed for textfiles)
}
var Action: longint;
begin
allowslash(p);
{ close first if opened }
if ((flags and $10000)=0) then
begin
case filerec(f).mode of
fminput,fmoutput,fminout : Do_Close(filerec(f).handle);
fmclosed:;
else
begin
inoutres:=102; {not assigned}
exit;
end;
end;
end;
{ reset file handle }
filerec(f).handle := UnusedHandle;
Action := 0;
{ convert filemode to filerec modes }
case (flags and 3) of
0 : filerec(f).mode:=fminput;
1 : filerec(f).mode:=fmoutput;
2 : filerec(f).mode:=fminout;
end;
if (flags and $1000)<>0 then
Action := $50000; (* Create / replace *)
{ empty name is special }
if p[0]=#0 then
begin
case FileRec(f).mode of
fminput :
FileRec(f).Handle:=StdInputHandle;
fminout, { this is set by rewrite }
fmoutput :
FileRec(f).Handle:=StdOutputHandle;
fmappend :
begin
FileRec(f).Handle:=StdOutputHandle;
FileRec(f).mode:=fmoutput; {fool fmappend}
end;
end;
exit;
end;
Action := Action or (Flags and $FF);
(* DenyAll if sharing not specified. *)
if Flags and 112 = 0 then
Action := Action or 16;
asm
movl $0x7f2b, %eax
movl Action, %ecx
movl p, %edx
call syscall
cmpl $0xffffffff, %eax
jnz .LOPEN1
movw %cx, InOutRes
movw UnusedHandle, %ax
.LOPEN1:
movl f,%edx
movw %ax,(%edx)
end;
if (InOutRes = 4) and Increase_File_Handle_Count then
(* Trying again after increasing amount of file handles *)
asm
movl $0x7f2b, %eax
movl Action, %ecx
movl p, %edx
call syscall
cmpl $0xffffffff, %eax
jnz .LOPEN2
movw %cx, InOutRes
movw UnusedHandle, %ax
.LOPEN2:
movl f,%edx
movw %ax,(%edx)
end;
{ for systems that have more handles }
if FileRec (F).Handle > FileHandleCount then
FileHandleCount := FileRec (F).Handle;
if (flags and $100)<>0 then
begin
do_seekend(filerec(f).handle);
FileRec (F).Mode := fmOutput; {fool fmappend}
end;
end;
{$ASMMODE INTEL}
function do_isdevice (Handle: longint): boolean; assembler;
(*
var HT, Attr: longint;
begin
if os_mode = osOS2 then
begin
if DosQueryHType (Handle, HT, Attr) <> 0 then HT := 1;
end
else
*)
asm
mov ebx, Handle
mov eax, 4400h
call syscall
mov eax, 1
jc @IsDevEnd
test edx, 80h
jnz @IsDevEnd
dec eax
@IsDevEnd:
end;
{$ASMMODE ATT}
{*****************************************************************************
UnTyped File Handling
*****************************************************************************}
{$i file.inc}
{*****************************************************************************
Typed File Handling
*****************************************************************************}
{$i typefile.inc}
{*****************************************************************************
Text File Handling
*****************************************************************************}
{$DEFINE EOF_CTRLZ}
{$i text.inc}
{****************************************************************************
Directory related routines.
****************************************************************************}
{*****************************************************************************
Directory Handling
*****************************************************************************}
procedure dosdir(func:byte;const s:string);
var buffer:array[0..255] of char;
begin
move(s[1],buffer,length(s));
buffer[length(s)]:=#0;
allowslash(Pchar(@buffer));
asm
leal buffer,%edx
movb func,%ah
call syscall
jnc .LDOS_DIRS1
movw %ax,inoutres;
.LDOS_DIRS1:
end;
end;
procedure mkdir(const s : string);
begin
DosDir($39,s);
end;
procedure rmdir(const s : string);
begin
DosDir($3a,s);
end;
procedure chdir(const s : string);
begin
DosDir($3b,s);
end;
procedure getdir(drivenr : byte;var dir : shortstring);
{Written by Michael Van Canneyt.}
var temp:array[0..255] of char;
sof:Pchar;
i:byte;
begin
sof:=pchar(@dir[4]);
{ dir[1..3] will contain '[drivenr]:\', but is not }
{ supplied by DOS, so we let dos string start at }
{ dir[4] }
{ Get dir from drivenr : 0=default, 1=A etc... }
asm
movb drivenr,%dl
movl sof,%esi
mov $0x47,%ah
call syscall
end;
{ Now Dir should be filled with directory in ASCIIZ, }
{ starting from dir[4] }
dir[0]:=#3;
dir[2]:=':';
dir[3]:='\';
i:=4;
{Conversion to Pascal string }
while (dir[i]<>#0) do
begin
{ convert path name to DOS }
if dir[i]='/' then
dir[i]:='\';
dir[0]:=char(i);
inc(i);
end;
{ upcase the string (FPC function) }
if not (FileNameCaseSensitive) then dir:=upcase(dir);
if drivenr<>0 then { Drive was supplied. We know it }
dir[1]:=char(65+drivenr-1)
else
begin
{ We need to get the current drive from DOS function 19H }
{ because the drive was the default, which can be unknown }
asm
movb $0x19,%ah
call syscall
addb $65,%al
movb %al,i
end;
dir[1]:=char(i);
end;
end;
{****************************************************************************
System unit initialization.
****************************************************************************}
function GetFileHandleCount: longint;
var L1, L2: longint;
begin
L1 := 0; (* Don't change the amount, just check. *)
if DosSetRelMaxFH (L1, L2) <> 0 then GetFileHandleCount := 50
else GetFileHandleCount := L2;
end;
var pib:Pprocessinfoblock;
tib:Pthreadinfoblock;
begin
{Determine the operating system we are running on.}
asm
movl $0,os_mode
movw $0x7f0a,%ax
call syscall
testw $512,%bx {Bit 9 is OS/2 flag.}
setnzb os_mode
testw $4096,%bx
jz .LnoRSX
movl $2,os_mode
.LnoRSX:
end;
{$ASMMODE DIRECT}
{Enable the brk area by initializing it with the initial heap size.}
asm
movw $0x7f01,%ax
movl HEAPSIZE,%edx
addl __heap_base,%edx
call ___SYSCALL
cmpl $-1,%eax
jnz Lheapok
pushl $204
{call RUNERROR$$WORD}
Lheapok:
end;
{$ASMMODE ATT}
{Now request, if we are running under DOS,
read-access to the first meg. of memory.}
if os_mode in [osDOS,osDPMI] then
asm
movw $0x7f13,%ax
xorl %ebx,%ebx
movl $0xfff,%ecx
xorl %edx,%edx
call syscall
movl %eax,first_meg
end
else
begin
first_meg := nil;
(* Initialize the amount of file handles *)
FileHandleCount := GetFileHandleCount;
end;
{At 0.9.2, case for enumeration does not work.}
case os_mode of
osDOS:
stackbottom:=0; {In DOS mode, heap_brk is also the
stack bottom.}
osOS2:
begin
dosgetinfoblocks(tib,pib);
stackbottom:=longint(tib^.stack);
end;
osDPMI:
stackbottom:=0; {Not sure how to get it, but seems to be
always zero.}
end;
exitproc:=nil;
{Initialize the heap.}
initheap;
{ ... and exceptions }
InitExceptions;
{ to test stack depth }
loweststack:=maxlongint;
OpenStdIO(Input,fmInput,StdInputHandle);
OpenStdIO(Output,fmOutput,StdOutputHandle);
OpenStdIO(StdOut,fmOutput,StdOutputHandle);
OpenStdIO(StdErr,fmOutput,StdErrorHandle);
{ no I/O-Error }
inoutres:=0;
end.
{
$Log$
Revision 1.1 2000-10-15 08:19:49 peter
* system unit rename for 1.1 branch
Revision 1.3 2000/09/29 21:49:41 jonas
* removed warnings
Revision 1.2 2000/07/14 10:33:11 michael
+ Conditionals fixed
Revision 1.1 2000/07/13 06:31:07 michael
+ Initial import
}

View File

@ -123,12 +123,16 @@ WININC=wininc
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=syswin32
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
SYSTEMUNIT=syswin32
# Files used by windows.pp
include $(WININC)/makefile.inc
@ -1282,39 +1286,39 @@ wdllprt0$(OEXT) : wdllprt0.as
# System Units (System, Objpas, Strings)
#
$(SYSTEMPPU) : syswin32.pp win32.inc $(SYSDEPS)
$(COMPILER) -Us -Sg syswin32.pp $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp win32.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
windows$(PPUEXT) : windows.pp $(WINDOWS_SOURCE_FILES) $(SYSTEMPPU)
windows$(PPUEXT) : windows.pp $(WINDOWS_SOURCE_FILES) $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(WININC) windows.pp $(REDIR)
ole2$(PPUEXT) : ole2.pp windows$(PPUEXT) $(SYSTEMPPU)
ole2$(PPUEXT) : ole2.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
opengl32$(PPUEXT) : opengl32.pp windows$(PPUEXT) $(SYSTEMPPU)
opengl32$(PPUEXT) : opengl32.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
os_types$(PPUEXT) : $(INC)/os_types.pp
winsock$(PPUEXT) : winsock.pp windows$(PPUEXT) $(SYSTEMPPU) os_types$(PPUEXT)
winsock$(PPUEXT) : winsock.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) os_types$(PPUEXT)
sockets$(PPUEXT) : sockets.pp windows$(PPUEXT) winsock$(PPUEXT) $(SYSTEMPPU) \
sockets$(PPUEXT) : sockets.pp windows$(PPUEXT) winsock$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(INC)/sockets.inc $(INC)/socketsh.inc
initc$(PPUEXT) : initc.pp $(SYSTEMPPU)
initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)
wincrt$(PPUEXT) : wincrt.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
wincrt$(PPUEXT) : wincrt.pp $(SYSTEMUNIT)$(PPUEXT) windows$(PPUEXT) graph$(PPUEXT)
winmouse$(PPUEXT) : winmouse.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
winmouse$(PPUEXT) : winmouse.pp $(SYSTEMUNIT)$(PPUEXT) windows$(PPUEXT) graph$(PPUEXT)
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
@ -1322,11 +1326,11 @@ dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) $(SYSTEMPPU)
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc $(SYSTEMPPU) objpas$(PPUEXT) dos$(PPUEXT) windows$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT) dos$(PPUEXT) windows$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
@ -1335,7 +1339,7 @@ objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
include $(GRAPHDIR)/makefile.inc
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
graph$(PPUEXT) : graph.pp strings$(PPUEXT) windows$(PPUEXT) $(SYSTEMPPU) \
graph$(PPUEXT) : graph.pp strings$(PPUEXT) windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(GRAPHINCDEPS)
$(COMPILER) -I$(GRAPHDIR) graph.pp $(REDIR)
@ -1362,16 +1366,16 @@ varutils$(PPUEXT) : varutils.pp $(OBJPASDIR)/cvarutil.inc \
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units

View File

@ -36,12 +36,16 @@ WININC=wininc
UNITPREFIX=rtl
ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
SYSTEMUNIT=system
else
SYSTEMUNIT=syswin32
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
SYSTEMUNIT=syswin32
# Files used by windows.pp
include $(WININC)/makefile.inc
@ -87,39 +91,39 @@ wdllprt0$(OEXT) : wdllprt0.as
# System Units (System, Objpas, Strings)
#
$(SYSTEMPPU) : syswin32.pp win32.inc $(SYSDEPS)
$(COMPILER) -Us -Sg syswin32.pp $(REDIR)
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp win32.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(SYSTEMUNIT).pp $(REDIR)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU)
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR)
strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\
$(PROCINC)/strings.inc $(PROCINC)/stringss.inc\
$(SYSTEMPPU)
$(SYSTEMUNIT)$(PPUEXT)
#
# System Dependent Units
#
windows$(PPUEXT) : windows.pp $(WINDOWS_SOURCE_FILES) $(SYSTEMPPU)
windows$(PPUEXT) : windows.pp $(WINDOWS_SOURCE_FILES) $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -I$(WININC) windows.pp $(REDIR)
ole2$(PPUEXT) : ole2.pp windows$(PPUEXT) $(SYSTEMPPU)
ole2$(PPUEXT) : ole2.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
opengl32$(PPUEXT) : opengl32.pp windows$(PPUEXT) $(SYSTEMPPU)
opengl32$(PPUEXT) : opengl32.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
os_types$(PPUEXT) : $(INC)/os_types.pp
winsock$(PPUEXT) : winsock.pp windows$(PPUEXT) $(SYSTEMPPU) os_types$(PPUEXT)
winsock$(PPUEXT) : winsock.pp windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) os_types$(PPUEXT)
sockets$(PPUEXT) : sockets.pp windows$(PPUEXT) winsock$(PPUEXT) $(SYSTEMPPU) \
sockets$(PPUEXT) : sockets.pp windows$(PPUEXT) winsock$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(INC)/sockets.inc $(INC)/socketsh.inc
initc$(PPUEXT) : initc.pp $(SYSTEMPPU)
initc$(PPUEXT) : initc.pp $(SYSTEMUNIT)$(PPUEXT)
wincrt$(PPUEXT) : wincrt.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
wincrt$(PPUEXT) : wincrt.pp $(SYSTEMUNIT)$(PPUEXT) windows$(PPUEXT) graph$(PPUEXT)
winmouse$(PPUEXT) : winmouse.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
winmouse$(PPUEXT) : winmouse.pp $(SYSTEMUNIT)$(PPUEXT) windows$(PPUEXT) graph$(PPUEXT)
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
@ -127,11 +131,11 @@ dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
# TP7 Compatible RTL Units
#
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) $(SYSTEMPPU)
dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc $(SYSTEMPPU) objpas$(PPUEXT) dos$(PPUEXT) windows$(PPUEXT)
crt$(PPUEXT) : crt.pp $(INC)/textrec.inc $(SYSTEMUNIT)$(PPUEXT) objpas$(PPUEXT) dos$(PPUEXT) windows$(PPUEXT)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMUNIT)$(PPUEXT)
#
# Graph
@ -140,7 +144,7 @@ objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU)
include $(GRAPHDIR)/makefile.inc
GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES))
graph$(PPUEXT) : graph.pp strings$(PPUEXT) windows$(PPUEXT) $(SYSTEMPPU) \
graph$(PPUEXT) : graph.pp strings$(PPUEXT) windows$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
$(GRAPHINCDEPS)
$(COMPILER) -I$(GRAPHDIR) graph.pp $(REDIR)
@ -167,16 +171,16 @@ varutils$(PPUEXT) : varutils.pp $(OBJPASDIR)/cvarutil.inc \
# Other system-independent RTL Units
#
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU)
cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMUNIT)$(PPUEXT)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU)
mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU)
getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU)
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMPPU)
lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
#
# Other system-dependent RTL Units

1401
rtl/win32/system.pp Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff