diff options
author | Yves Orton <demerphq@gmail.com> | 2006-05-01 21:02:09 +0200 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2006-05-02 14:28:31 +0000 |
commit | f4257e4d90c288c896435eca90d56255a0334871 (patch) | |
tree | a0ffec8a5f9406d9d6e66cfce6935231960dc3e5 /wince | |
parent | f4890806d306bfeee79f1864c882eb307b4f54fd (diff) | |
download | perl-f4257e4d90c288c896435eca90d56255a0334871.tar.gz |
Re: Merge WinCE into Win32 directory and remove the the WinCE directory
Message-ID: <9b18b3110605011002m56c0db99n169ae677efb6d059@mail.gmail.com>
Plus adjustements to MANIFEST. Also, perlmain.c seemed to be missing
from the patch.
p4raw-id: //depot/perl@28061
Diffstat (limited to 'wince')
36 files changed, 0 insertions, 20141 deletions
diff --git a/wince/Makefile.ce b/wince/Makefile.ce deleted file mode 100644 index 1becaaf241..0000000000 --- a/wince/Makefile.ce +++ /dev/null @@ -1,971 +0,0 @@ -# perl makefile for wince -# -# Time-stamp: <26/10/01 15:10:06 keuchel@keuchelnt> - -SRCDIR = .. -PV = 59 -INST_VER = 5.9.4 - -# INSTALL_ROOT specifies a path where this perl will be installed on CE device -INSTALL_ROOT=/netzwerk/sprache/perl -INST_TOP=$(INSTALL_ROOT) -INST_VER= - -# PERLCEDIR shoud be set to current directory -PERLCEDIR = H:\src\wince\perl\wince - -# WCEROOT is a directory where Windows CE Tools was installed -WCEROOT = D:\Windows CE Tools - -# HPERL stands for host perl, which is perl on local desktop machine -# which is usually ..\miniperl.exe -#HPERL = N:\Programme\perl\bin\perl.exe -HPERL = $(MAKEDIR)\..\miniperl.exe - -CEPATH = D:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN -CELIBDLLDIR = h:\src\wince\celib-palm-3.0 -CECONSOLEDIR = h:\src\wince\w32console - -# specify following options to build perl on local machine, by MSVC -MSVCDIR = D:\MSVStudio\VC98 -CCHOME = $(MSVCDIR) -CCINCDIR = $(CCHOME)\include -CCLIBDIR = $(CCHOME)\lib - -# Only for WIN2000 -#YES = /y -COPY = copy $(YES) -XCOPY = xcopy $(YES) /f /r /i /d -RCOPY = xcopy $(YES) /f /r /i /e /d - -# cecopy program. Make shure it is in your path, as well as cemkdir, cedel -CECOPY = cecopy - -# -# Comment out next assign to disable perl's I/O subsystem and use compiler's -# stdio for IO - depending on your compiler vendor and run time library you may -# then get a number of fails from make test i.e. bugs - complain to them not us ;-). -# You will also be unable to take full advantage of perl5.8's support for multiple -# encodings and may see lower IO performance. You have been warned. -USE_PERLIO = define - -# -# set this if you wish to use perl's malloc -# This will make perl run few times faster -# WARNING: Turning this on/off WILL break binary compatibility with extensions -# you may have compiled with/without it. -# -PERL_MALLOC = define - - -NOOP = @echo -# keep this untouched! -NULL = - - -#CFG=DEBUG -CFG=RELEASE - -!if "$(MACHINE)" == "" -MACHINE=wince-arm-hpc-wce300 -#MACHINE=wince-arm-hpc-wce211 -#MACHINE=wince-sh3-hpc-wce211 -#MACHINE=wince-mips-hpc-wce211 -#MACHINE=wince-sh3-hpc-wce200 -#MACHINE=wince-mips-hpc-wce200 -#MACHINE=wince-arm-pocket-wce300 -#MACHINE=wince-mips-pocket-wce300 -#MACHINE=wince-sh3-pocket-wce300 -#MACHINE=wince-x86em-pocket-wce300 -#MACHINE=wince-mips-palm-wce211 -#MACHINE=wince-sh3-palm-wce211 -#MACHINE=wince-x86em-palm-wce211 -!endif - -# set this to your email address -# -#EMAIL = - -##################### CHANGE THESE ONLY IF YOU MUST ##################### - -###################################################################### -# machines - -!if "$(MACHINE)" == "wince-sh3-hpc-wce211" -CC = shcl.exe -ARCH = SH3 -CPU = SH3 -TARGETCPU = SH3 -CEVersion = 211 -OSVERSION = WCE211 -PLATFORM = MS HPC Pro -MCFLAGS = -MDd -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.11 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-mips-hpc-wce211" -CC = clmips.exe -ARCH = MIPS -CPU = MIPS -TARGETCPU = MIPS -CEVersion = 211 -OSVERSION = WCE211 -PLATFORM = MS HPC Pro -MCFLAGS = -D _MT -D _DLL \ - -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \ - -D PALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.11 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-mips-hpc-wce200" -CC = clmips.exe -ARCH = MIPS -CPU = MIPS -TARGETCPU = MIPS -CEVersion = 200 -OSVERSION = WCE200 -PLATFORM = MS HPC -# MUST USE -MD to get the right FPE stuff... -MCFLAGS = -D _MT -D _DLL -MD \ - -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \ - -D PALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.00 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-sh3-hpc-wce200" -CC = shcl.exe -ARCH = SH3 -CPU = SH3 -TARGETCPU = SH3 -CEVersion = 200 -OSVERSION = WCE200 -PLATFORM = MS HPC -# MUST USE -MD to get the right FPE stuff... -MCFLAGS = -D _MT -D _DLL -MD \ - -D SH3 -D sh3 -D _SH3_ -D _sh3_ -D SHx -DPROCESSOR_SH3 \ - -D PALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.00 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-arm-hpc-wce211" -CC = clarm.exe -ARCH = ARM -CPU = ARM -TARGETCPU = ARM -CEVersion = 211 -OSVERSION = WCE211 -PLATFORM = MS HPC Pro -MCFLAGS = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \ - -DPROCESSOR_ARM -DPALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.11 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-arm-hpc-wce300" -CC = clarm.exe -ARCH = ARM -CPU = ARM -TARGETCPU = ARM -CEVersion = 300 -OSVERSION = WCE300 -#PLATFORM = HPC2000 -MCFLAGS = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \ - -DPROCESSOR_ARM -DPALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,3.00 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-mips-palm-wce211" -CC = clmips.exe -ARCH = MIPS -CPU = MIPS -TARGETCPU = MIPS -CEVersion = 211 -OSVERSION = WCE211 -PLATFORM = MS Palm Size PC -MCFLAGS = -DMIPS -D_MIPS_ -DPROCESSOR_MIPS -D PALM_SIZE -D _DLL -D _MT \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.11 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-sh3-palm-wce211" -CC = shcl.exe -ARCH = SH3 -CPU = SH3 -TARGETCPU = SH3 -CEVersion = 211 -OSVERSION = WCE211 -PLATFORM = MS Palm Size PC -MCFLAGS = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \ - -I $(CELIBDLLDIR)\inc -SUBSYS = -subsystem:windowsce,2.11 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-x86em-palm-wce211" -CC = cl.exe -ARCH = X86EM -CPU = X86 -TARGETCPU = X86 -CEVersion = 211 -OSVERSION = WCE211 -PLATFORM = MS Palm Size PC -MCFLAGS = -MDd -DX86 -D_X86_ -DPROCESSOR_X86 \ - -D_WIN32_WCE_EMULATION -DPALM_SIZE \ - -I $(CELIBDLLDIR)\inc -MACH = -machine:x86 -SUBSYS = -subsystem:windows -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-x86em-pocket-wce300" -CC = cl.exe -ARCH = X86EM -CPU = X86 -TARGETCPU = X86 -CEVersion = 300 -OSVERSION = WCE300 -PLATFORM = MS Pocket PC -MCFLAGS = -DX86 -D_X86_ -DPROCESSOR_X86 -D _MT -D _DLL \ - -D_WIN32_WCE_EMULATION -DPALM_SIZE -DPOCKET_SIZE \ - -I $(CELIBDLLDIR)\inc -MACH = -machine:x86 -SUBSYS = -subsystem:windows -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-mips-pocket-wce300" -CC = clmips.exe -ARCH = MIPS -CPU = MIPS -TARGETCPU = MIPS -CEVersion = 300 -OSVERSION = WCE300 -PLATFORM = MS Pocket PC -MCFLAGS = -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \ - -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \ - -I $(CELIBDLLDIR)\inc -MACH = -machine:mips -SUBSYS = -subsystem:windowsce,3.00 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -#STDLIBPATH = $(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(CPU) -LDLIBPATH = -libpath:$(CELIBPATH) -#"-libpath:$(STDLIBPATH)" -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-sh3-pocket-wce300" -CC = shcl.exe -ARCH = SH3 -CPU = SH3 -TARGETCPU = SH3 -CEVersion = 300 -OSVERSION = WCE300 -PLATFORM = MS Pocket PC -MCFLAGS = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 \ - -DPALM_SIZE -DPOCKET_SIZE \ - -I $(CELIBDLLDIR)\inc -MACH = -machine:sh3 -SUBSYS = -subsystem:windowsce,3.00 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -!if "$(MACHINE)" == "wince-arm-pocket-wce300" -CC = clarm.exe -ARCH = ARM -CPU = ARM -TARGETCPU = ARM -CEVersion = 300 -OSVERSION = WCE300 -PLATFORM = MS Pocket PC -MCFLAGS = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \ - -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \ - -I $(CELIBDLLDIR)\inc -MACH = -machine:arm -SUBSYS = -subsystem:windowsce,3.00 -CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release -LDLIBPATH = -libpath:$(CELIBPATH) -STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \ - $(CECONSOLEDIR)/$(MACHINE)/w32console.obj -!endif - -###################################################################### -# common section - -CEDEFS = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \ - $(MCFLAGS) -D PERL - -#CEDEFS = $(CEDEFS) -DDEBUGGING_OPS - -CECFLAGS = $(CEDEFS) - -!if "$(CFG)" == "DEBUG" -CECFLAGS = $(CECFLAGS) -Zi -Od -!endif - -!if "$(CFG)" == "RELEASE" -# -O2 and -Ot give internal compiler error in perl.c and lexer. -# Also the dll cannot be loaded by perl.exe... -!if "$(CPU)" == "SH3" -!else -CECFLAGS = $(CECFLAGS) -O2 -Ot -!endif - -!endif - -RCDEFS = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \ - /d _WIN32_WCE=$(CEVersion) - -PATH=$(CEPATH);$(PATH) - -INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include -LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH) - -###################################################################### - -!message -!message Compiling for $(MACHINE) -!message LIB=$(LIB) -!message INCLUDE=$(INCLUDE) -!message PATH=$(CEPATH) -!message - -###################################################################### -# -# Additional compiler flags can be specified here. -# - -BUILDOPT = $(BUILDOPT) $(CECFLAGS) - - -!IF "$(CRYPT_SRC)$(CRYPT_LIB)" == "" -D_CRYPT = undef -!ELSE -D_CRYPT = define -CRYPT_FLAG = -DHAVE_DES_FCRYPT -!ENDIF - -!IF "$(PERL_MALLOC)" == "" -PERL_MALLOC = undef -!ENDIF - -!IF "$(USE_MULTI)" == "" -USE_MULTI = undef -!ENDIF - -!IF "$(USE_ITHREADS)" == "" -USE_ITHREADS = undef -!ENDIF - -!IF "$(USE_IMP_SYS)" == "" -USE_IMP_SYS = undef -!ENDIF - -!IF "$(USE_PERLIO)" == "" -USE_PERLIO = undef -!ENDIF - -!IF "$(USE_PERLCRT)" == "" -USE_PERLCRT = undef -!ENDIF - -!IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef" -USE_MULTI = define -!ENDIF - -!IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef" -USE_MULTI = define -!ENDIF - -!IF "$(USE_MULTI)" != "undef" -BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT -!ENDIF - -!IF "$(USE_IMP_SYS)" != "undef" -BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS -!ENDIF - -!IF "$(USE_PERLIO)" == "define" -BUILDOPT = $(BUILDOPT) -DUSE_PERLIO -!ENDIF - -!IF "$(CROSS_NAME)" == "" -CROSS_NAME = $(MACHINE) -!ENDIF - -# new option - automatically defined in perl.h... -#BUILDOPT = $(BUILDOPT) -DUSE_ENVIRON_ARRAY - -PROCESSOR_ARCHITECTURE = $(TARGETCPU) -ARCHNAME = $(PLATFORM)-$(OSVERSION)-$(PROCESSOR_ARCHITECTURE) -ARCHDIR = ..\lib\$(ARCHNAME) -COREDIR = ..\lib\CORE -XCOREDIR = ..\xlib\$(CROSS_NAME)\CORE -AUTODIR = ..\lib\auto -LIBDIR = ..\lib -EXTDIR = ..\ext -PODDIR = ..\pod -EXTUTILSDIR = $(LIBDIR)\ExtUtils - -LINK32 = link -LIB32 = $(LINK32) -lib -RSC = rc - -INCLUDES = -I.\include -I..\win32\include -I. -I.. -DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) $(CECFLAGS) -LOCDEFS = -DPERLDLL -DPERL_CORE -CXX_FLAG = -TP - -PERLEXE_RES = perl.res -PERLDLL_RES = - -!if "$(CFG)" == "RELEASE" -CELIB = celib.lib -!endif - -!if "$(CFG)" == "DEBUG" -CELIB = celib.lib -!endif - -CELIBS = -nodefaultlib \ - winsock.lib $(CELIB) coredll.lib - -!if $(CEVersion) > 200 -CELIBS = $(CELIBS) corelibc.lib -!else -CELIBS = $(CELIBS) msvcrt.lib -!endif - -LIBBASEFILES = $(CRYPT_LIB) $(CELIBS) - -LIBFILES = $(LIBBASEFILES) $(LIBC) - -CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \ - $(PCHFLAGS) $(OPTIMIZE) - -LINK_FLAGS = -nologo -machine:$(PROCESSOR_ARCHITECTURE) - -!if "$(CFG)" == "DEBUG" -LINK_FLAGS = $(LINK_FLAGS) -debug:full -pdb:none -!else -LINK_FLAGS = $(LINK_FLAGS) -release -!endif - -OBJOUT_FLAG = -Fo -EXEOUT_FLAG = -Fe - -CFLAGS_O = $(CFLAGS) $(BUILDOPT) - -o = .obj - -# -# Rules -# - -.SUFFIXES : .c $(o) .dll .lib .exe .rc .res - -.c$(o): - $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $< - -.y.c: - $(NOOP) - -$(o).dll: - $(LINK32) -dll $(SUBSYS) $(LDLIBPATH) \ - -implib:$(*B).lib -def:$(*B).def \ - -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL) - -.rc.res: - $(RSC) -i.. $< - -# This must be relative to ../lib/CORE, else the ext dll build fails... -PERLIMPLIB_EXP = ..\..\..\xlib\$(CROSS_NAME)\CORE\perl$(PV).lib -PERLIMPLIB = $(PERLCEDIR)\$(MACHINE)\perl$(PV).lib -PERLDLL = $(MACHINE)\perl$(PV).dll - -DLLDIR = $(MACHINE)\dll -PERLEXE = $(MACHINE)\perl.exe - -CONFIGPM = ..\xlib\$(CROSS_NAME)\Config.pm -MINIMOD = ..\lib\ExtUtils\Miniperl.pm - -# Unicode data files generated by mktables -UNIDATAFILES = ..\lib\unicore\Canonical.pl ..\lib\unicore\Exact.pl \ - ..\lib\unicore\Properties ..\lib\unicore\Decomposition.pl \ - ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \ - ..\lib\unicore\PVA.pl - -# Directories of Unicode data files generated by mktables -UNIDATADIR1 = ..\lib\unicore\To -UNIDATADIR2 = ..\lib\unicore\lib - -# Nominate a target which causes extensions to be re-built -# This used to be $(PERLEXE), but at worst it is the .dll that they depend -# on and really only the interface - i.e. the .def file used to export symbols -# from the .dll -PERLDEP = perldll.def - -MAKE = nmake -nologo - -CFGSH_TMPL = config.ce -CFGH_TMPL = config_H.ce - -# -# filenames given to xsubpp must have forward slashes (since it puts -# full pathnames in #line strings) -XSUBPP = $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) ..\$(EXTUTILSDIR)\xsubpp \ - -C++ -prototypes - -MICROCORE_SRC = \ - ..\av.c \ - ..\deb.c \ - ..\doio.c \ - ..\doop.c \ - ..\dump.c \ - ..\globals.c \ - ..\gv.c \ - ..\hv.c \ - ..\mg.c \ - ..\op.c \ - ..\pad.c \ - ..\perl.c \ - ..\perlapi.c \ - ..\perly.c \ - ..\pp.c \ - ..\pp_ctl.c \ - ..\pp_hot.c \ - ..\pp_pack.c \ - ..\pp_sort.c \ - ..\pp_sys.c \ - ..\reentr.c \ - ..\regcomp.c \ - ..\regexec.c \ - ..\run.c \ - ..\scope.c \ - ..\sv.c \ - ..\taint.c \ - ..\toke.c \ - ..\universal.c \ - ..\utf8.c \ - ..\util.c \ - ..\xsutils.c - -EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c - -!IF "$(PERL_MALLOC)" == "define" -EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c -!ENDIF - -EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c .\win32io.c - -WIN32_SRC = \ - .\wince.c \ - .\wincesck.c \ - .\win32thread.c - -!IF "$(CRYPT_SRC)" != "" -WIN32_SRC = $(WIN32_SRC) .\$(CRYPT_SRC) -!ENDIF - -DLL_SRC = $(DYNALOADER).c - -CORE_NOCFG_H = \ - ..\av.h \ - ..\cop.h \ - ..\cv.h \ - ..\dosish.h \ - ..\embed.h \ - ..\form.h \ - ..\gv.h \ - ..\handy.h \ - ..\hv.h \ - ..\iperlsys.h \ - ..\mg.h \ - ..\nostdio.h \ - ..\op.h \ - ..\opcode.h \ - ..\perl.h \ - ..\perlapi.h \ - ..\perlsdio.h \ - ..\perlsfio.h \ - ..\perly.h \ - ..\pp.h \ - ..\proto.h \ - ..\regexp.h \ - ..\scope.h \ - ..\sv.h \ - ..\thread.h \ - ..\unixish.h \ - ..\utf8.h \ - ..\util.h \ - ..\warnings.h \ - ..\XSUB.h \ - ..\EXTERN.h \ - ..\perlvars.h \ - ..\intrpvar.h \ - ..\thrdvar.h \ - .\include\dirent.h \ - .\include\netdb.h \ - .\include\sys\socket.h \ - .\win32.h - -CORE_H = $(CORE_NOCFG_H) .\config.h - -MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj) -CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj) -WIN32_OBJ = $(WIN32_SRC:.c=.obj) -#WIN32_OBJ = $(WIN32_OBJ:.\=.\$(DLLDIR)\) -MINICORE_OBJ = $(MICROCORE_OBJ:..\=.\$(DLLDIR)\) \ - $(MINIDIR)\miniperlmain$(o) \ - $(MINIDIR)\perlio$(o) -MINIWIN32_OBJ = $(WIN32_OBJ:.\=.\$(DLLDIR)\) -MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) -DLL_OBJ = $(DLL_SRC:.c=.obj) -X2P_OBJ = $(X2P_SRC:.c=.obj) - -PERLDLL_OBJ = $(CORE_OBJ) -PERLEXE_OBJ = perlmain$(o) - -PERLDLL_OBJ = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ) -#PERLEXE_OBJ = $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ) - -!IF "$(USE_SETARGV)" != "" -SETARGV_OBJ = setargv$(o) -!ENDIF - -DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \ - Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \ - Sys/Hostname - -STATIC_EXT = DynaLoader - -DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader - -ERRNO_PM = $(LIBDIR)\Errno.pm - - -EXTENSION_PM = \ - $(ERRNO_PM) - -POD2HTML = $(PODDIR)\pod2html -POD2MAN = $(PODDIR)\pod2man -POD2LATEX = $(PODDIR)\pod2latex -POD2TEXT = $(PODDIR)\pod2text - -CFG_VARS = \ - "INST_DRV=$(INST_DRV)" \ - "INST_TOP=$(INST_TOP)" \ - "INST_VER=$(INST_VER)" \ - "INST_ARCH=$(INST_ARCH)" \ - "archname=$(ARCHNAME)" \ - "CC=$(CC)" \ - "ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \ - "cppflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \ - "cf_by=vkon" \ - "cf_email=$(EMAIL)" \ - "d_crypt=$(D_CRYPT)" \ - "d_mymalloc=$(PERL_MALLOC)" \ - "libs=$(LIBFILES)" \ - "incpath=$(CCINCDIR)" \ - "libperl=$(PERLIMPLIB_EXP)" \ - "libpth=$(LIBPATH)" \ - "libc=$(LIBC)" \ - "make=nmake" \ - "static_ext=$(STATIC_EXT)" \ - "dynamic_ext=$(DYNAMIC_EXT)" \ - "useithreads=$(USE_ITHREADS)" \ - "usemultiplicity=$(USE_MULTI)" \ - "useperlio=$(USE_PERLIO)" \ - "LINK_FLAGS=$(LDLIBPATH) $(LINK_FLAGS) $(SUBSYS)" \ - "optimize=$(OPTIMIZE)" - -# -# Top targets -# - -all: hostminiperl $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) Extensions - -$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c - -$(CONFIGPM): .\config.h ..\config.sh ..\minimod.pl - cd .. && $(HPERL) configpm --cross=$(CROSS_NAME) --no-glossary - -mkdir $(XCOREDIR) - $(XCOPY) ..\*.h $(XCOREDIR)\*.* - $(XCOPY) ..\*.inc $(XCOREDIR)\*.* - $(XCOPY) *.h $(XCOREDIR)\*.* - $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* - $(RCOPY) include $(XCOREDIR)\*.* - $(XCOPY) ..\win32\include $(XCOREDIR)\*.* - $(HPERL) -I..\lib -MCross=$(CROSS_NAME) config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(XCOREDIR)" - -.\config.h: - -del /f config.h - copy config_H.ce config.h - -..\config.sh: config.ce config_sh.PL - $(HPERL) -I..\lib -I..\win32 config_sh.PL $(CFG_VARS) config.ce > ..\config.sh - -$(MINIMOD) : ..\minimod.pl - cd .. && $(HPERL) minimod.pl > lib\ExtUtils\Miniperl.pm - -perlmain.c : runperl.c - $(COPY) runperl.c perlmain.c - -$(DYNALOADER).c: $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM) - if not exist $(AUTODIR) mkdir $(AUTODIR) - cd $(EXTDIR)\$(*B) - $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) $(*B)_pm.PL - $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) XSLoader_pm.PL - cd ..\..\wince - $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) - $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL) - cd $(EXTDIR)\$(*B) - $(XSUBPP) dl_win32.xs > $(*B).c - cd ..\..\wince - -$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs - $(COPY) dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs - -#---------------------------------------------------------------------------------- -NOT_COMPILE_EXT = -!if "$(MACHINE)" == "wince-sh3-palm-wce211" -NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap -!endif -!if "$(MACHINE)" == "wince-mips-palm-wce211" -NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap -!endif - -Extensions: ..\win32\buildext.pl $(PERLDEP) $(CONFIGPM) - $(HPERL) -I..\lib -I..\win32 -MCross=$(CROSS_NAME) ..\win32\buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) \ - !POSIX $(NOT_COMPILE_EXT) - -Extensions_clean: - -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean - -#---------------------------------------------------------------------------------- - -$(PERLEXE_RES): perl.rc perl.ico - rc $(RCDEFS) perl.rc - -clean: - -rm -f $(MACHINE)/dll/* - -rm -f $(MACHINE)/*.obj - -rm -f $(MACHINE)/*.exe - -rm -f $(MACHINE)/*.dll - -rm -f $(MACHINE)/*.lib - -rm -f ../config.sh ../lib/Config.pm - -rm -f config.h perl.res - -XDLLOBJS = \ -$(DLLDIR)\av.obj \ -$(DLLDIR)\deb.obj \ -$(DLLDIR)\doio.obj \ -$(DLLDIR)\doop.obj \ -$(DLLDIR)\dump.obj \ -$(DLLDIR)\globals.obj \ -$(DLLDIR)\gv.obj \ -$(DLLDIR)\hv.obj \ -$(DLLDIR)\locale.obj \ -$(DLLDIR)\mathoms.obj \ -$(DLLDIR)\mg.obj \ -$(DLLDIR)\numeric.obj \ -$(DLLDIR)\op.obj \ -$(DLLDIR)\pad.obj \ -$(DLLDIR)\perl.obj \ -$(DLLDIR)\perlapi.obj \ -$(DLLDIR)\perlio.obj \ -$(DLLDIR)\perly.obj \ -$(DLLDIR)\pp.obj \ -$(DLLDIR)\pp_ctl.obj \ -$(DLLDIR)\pp_hot.obj \ -$(DLLDIR)\pp_pack.obj \ -$(DLLDIR)\pp_sort.obj \ -$(DLLDIR)\pp_sys.obj \ -$(DLLDIR)\reentr.obj \ -$(DLLDIR)\regcomp.obj \ -$(DLLDIR)\regexec.obj \ -$(DLLDIR)\run.obj \ -$(DLLDIR)\scope.obj \ -$(DLLDIR)\sv.obj \ -$(DLLDIR)\taint.obj \ -$(DLLDIR)\toke.obj \ -$(DLLDIR)\universal.obj \ -$(DLLDIR)\utf8.obj \ -$(DLLDIR)\util.obj \ -$(DLLDIR)\win32thread.obj \ -$(DLLDIR)\wince.obj \ -$(DLLDIR)\win32io.obj \ -$(DLLDIR)\wincesck.obj \ -$(DLLDIR)\xsutils.obj \ -$(DLLDIR)\perllib.obj \ -$(DLLDIR)\DynaLoader.obj -!IF "$(PERL_MALLOC)" == "define" -XDLLOBJS = $(XDLLOBJS) $(DLLDIR)\malloc.obj -!ENDIF -!IF "$(CRYPT_SRC)" != "" -XDLLOBJS = $(XDLLOBJS) $(DLLDIR)\fcrypt.obj -!ENDIF - -{$(SRCDIR)}.c{$(DLLDIR)}.obj: - $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $< - -# compiler explains that it will optimize toke.c if we'll give it an -# option -QMOb<num> with num>=4178 -$(DLLDIR)\toke.obj: - $(CC) -c $(CFLAGS_O) -QMOb9000 -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ ..\toke.c - -{$(SRCDIR)/wince}.c{$(DLLDIR)}.obj: - $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $< - -# -DPERL_IMPLICIT_SYS needs C++ for perllib.c -# This is the only file that depends on perlhost.h, vmem.h, and vdir.h -!IF "$(USE_IMP_SYS)" == "define" -$(DLLDIR)\perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h - $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c - rem (frustrated) mv perllib.obj $(DLLDIR) -!ENDIF - -perldll.def : $(HPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl - $(HPERL) -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \ - CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) > perldll.def - -$(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES) - $(LINK32) -dll -def:perldll.def -out:$@ \ - $(SUBSYS) $(LDLIBPATH) \ - $(LINK_FLAGS) $(LIBFILES) \ - $(XDLLOBJS) $(PERLDLL_RES) - -$(DLLDIR) : - if not exist "$(DLLDIR)" mkdir "$(DLLDIR)" - -$(DLLDIR)\DynaLoader.obj: $(EXTDIR)\DynaLoader\DynaLoader.c - $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ \ - $(EXTDIR)\DynaLoader\DynaLoader.c - -XPERLEXEOBJS = \ -$(MACHINE)\perlmain.obj - -$(PERLEXE) : $(PERLDLL) $(CONFIGPM) $(XPERLEXEOBJS) $(PERLEXE_RES) $(STARTOBJS) - $(XCOPY) $(MACHINE)\*.lib $(XCOREDIR) - $(LINK32) $(SUBSYS) $(LDLIBPATH) \ - -entry:wWinMainCRTStartup \ - -out:$(MACHINE)\perl.exe \ - -stack:0x100000 $(LINK_FLAGS) $(STARTOBJS) $(XPERLEXEOBJS) \ - $(PERLIMPLIB) $(PERLEXE_RES) $(LIBFILES) - -$(MACHINE)\perlmain.obj : perlmain.c - $(CC) $(CFLAGS_O) -UPERLDLL -Fo$(MACHINE)\ -c perlmain.c - -iodll: $(IO_DLL) -socketdll: $(SOCKET_DLL) -dumperdll: $(DUMPER_DLL) - -dlls: socketdll iodll dumperdll - -xmkdir -p $(MACHINE)/lib/auto/IO - cp ../lib/auto/IO/IO.bs $(MACHINE)/lib/auto/IO - cp ../lib/auto/IO/IO.dll $(MACHINE)/lib/auto/IO - -xmkdir $(MACHINE)/lib/auto/Socket - cp ../lib/auto/Socket/Socket.bs $(MACHINE)/lib/auto/Socket - cp ../lib/auto/Socket/Socket.dll $(MACHINE)/lib/auto/Socket - -xmkdir -p $(MACHINE)/lib/auto/Data/Dumper - cp ../lib/auto/Data/Dumper/Dumper.bs $(MACHINE)/lib/auto/Data/Dumper - cp ../lib/auto/Data/Dumper/Dumper.dll $(MACHINE)/lib/auto/Data/Dumper - -makedist: all dlls - $(COPY) $(CELIBPATH)\celib.dll $(MACHINE) - cp perl.txt $(MACHINE) - cp registry.bat $(MACHINE) - cp ../lib/Config.pm $(MACHINE)/lib - cd $(MACHINE) - rm -f perl-$(MACHINE).tar.gz - sh -c "tar cf perl-$(MACHINE).tar *.exe *.dll *.txt *.bat lib" - gzip -9 perl-$(MACHINE).tar - mv perl-$(MACHINE).tar.gz h:/freenet/new - cd .. - -install: all - -cemkdir "$(INSTALL_ROOT)" - -cemkdir "$(INSTALL_ROOT)\bin" - -cemkdir "$(INSTALL_ROOT)\lib" - $(CECOPY) "pc:$(MACHINE)/perl.exe" "ce:$(INSTALL_ROOT)/bin" - $(CECOPY) "pc:$(MACHINE)/perl$(PV).dll" "ce:$(INSTALL_ROOT)/bin" - $(CECOPY) "pc:../xlib/$(CROSS_NAME)/Config.pm" "ce:$(INSTALL_ROOT)/lib" - -$(UNIDATAFILES) : $(HPERL) $(CONFIGPM) ..\lib\unicore\mktables - cd ..\lib\unicore && \ - $(HPERL) -I.. mktables - -dist: all - $(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) - -zipdist: all - $(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) - $(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip - -zip: - $(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip - -perl.ico: - $(HPERL) makeico.pl - -hostminiperl: ..\miniperl.exe - -..\miniperl.exe: - cd ../win32 - set PATH=$(CCHOME)\bin;$(PATH) - $(MAKE) -f Makefile "CCHOME=$(MSVCDIR)" "CCINCDIR=$(CCHOME)\include" "CCLIBDIR=$(CCHOME)\lib" "INCLUDE=$(CCHOME)\include" "LIB=$(CCHOME)\lib" "LINK_FLAGS=" .\config.h ..\miniperl.exe - cd ../wince - -host-install: - perl -MConfig -MExtUtils::Install -we "install({'../lib/CORE', qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)/CORE#},1)" - perl -MConfig -MExtUtils::Install -we "install({'../xlib/$(CROSS_NAME)', qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)#},1)" - perl -MConfig -MFile::Copy -we "copy qq#./$(MACHINE)/perl$(PV).lib#, qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)/CORE#" - perl -MConfig -MFile::Copy -we "copy qq#../lib/Cross.pm#, qq#$$Config{installprefixexp}/lib#" - perl -MConfig -we "system qq#perl -pi.bak -we \"s{((arch^|priv)libexp)='.*'}{\$$1='# . \ - quotemeta($$Config{installprefixexp}) . \ - qq#/xlib/$(CROSS_NAME)'}\" $$Config{installprefixexp}/xlib/$(CROSS_NAME)/Config.pm#" diff --git a/wince/bin/exetype.pl b/wince/bin/exetype.pl deleted file mode 100644 index 27e3b94bc8..0000000000 --- a/wince/bin/exetype.pl +++ /dev/null @@ -1,108 +0,0 @@ -#!perl -w -use strict; - -# All the IMAGE_* structures are defined in the WINNT.H file -# of the Microsoft Platform SDK. - -my %subsys = (NATIVE => 1, - WINDOWS => 2, - CONSOLE => 3, - POSIX => 7, - WINDOWSCE => 9); - -unless (0 < @ARGV && @ARGV < 3) { - printf "Usage: $0 exefile [%s]\n", join '|', sort keys %subsys; - exit; -} - -$ARGV[1] = uc $ARGV[1] if $ARGV[1]; -unless (@ARGV == 1 || defined $subsys{$ARGV[1]}) { - (my $subsys = join(', ', sort keys %subsys)) =~ s/, (\w+)$/ or $1/; - print "Invalid subsystem $ARGV[1], please use $subsys\n"; - exit; -} - -my ($record,$magic,$signature,$offset,$size); -open EXE, "+< $ARGV[0]" or die "Cannot open $ARGV[0]: $!\n"; -binmode EXE; - -# read IMAGE_DOS_HEADER structure -read EXE, $record, 64; -($magic,$offset) = unpack "Sx58L", $record; - -die "$ARGV[0] is not an MSDOS executable file.\n" - unless $magic == 0x5a4d; # "MZ" - -# read signature, IMAGE_FILE_HEADER and first WORD of IMAGE_OPTIONAL_HEADER -seek EXE, $offset, 0; -read EXE, $record, 4+20+2; -($signature,$size,$magic) = unpack "Lx16Sx2S", $record; - -die "PE header not found" unless $signature == 0x4550; # "PE\0\0" - -die "Optional header is neither in NT32 nor in NT64 format" - unless ($size == 224 && $magic == 0x10b) || # IMAGE_NT_OPTIONAL_HDR32_MAGIC - ($size == 240 && $magic == 0x20b); # IMAGE_NT_OPTIONAL_HDR64_MAGIC - -# Offset 68 in the IMAGE_OPTIONAL_HEADER(32|64) is the 16 bit subsystem code -seek EXE, $offset+4+20+68, 0; -if (@ARGV == 1) { - read EXE, $record, 2; - my ($subsys) = unpack "S", $record; - $subsys = {reverse %subsys}->{$subsys} || "UNKNOWN($subsys)"; - print "$ARGV[0] uses the $subsys subsystem.\n"; -} -else { - print EXE pack "S", $subsys{$ARGV[1]}; -} -close EXE; -__END__ - -=head1 NAME - -exetype - Change executable subsystem type between "Console" and "Windows" - -=head1 SYNOPSIS - - C:\perl\bin> copy perl.exe guiperl.exe - C:\perl\bin> exetype guiperl.exe windows - -=head1 DESCRIPTION - -This program edits an executable file to indicate which subsystem the -operating system must invoke for execution. - -You can specify any of the following subsystems: - -=over - -=item CONSOLE - -The CONSOLE subsystem handles a Win32 character-mode application that -use a console supplied by the operating system. - -=item WINDOWS - -The WINDOWS subsystem handles an application that does not require a -console and creates its own windows, if required. - -=item NATIVE - -The NATIVE subsystem handles a Windows NT device driver. - -=item WINDOWSCE - -The WINDOWSCE subsystem handles Windows CE consumer electronics -applications. - -=item POSIX - -The POSIX subsystem handles a POSIX application in Windows NT. - -=back - -=head1 AUTHOR - -Jan Dubois <jand@activestate.com> - -=cut diff --git a/wince/bin/perlglob.pl b/wince/bin/perlglob.pl deleted file mode 100644 index 17843c877a..0000000000 --- a/wince/bin/perlglob.pl +++ /dev/null @@ -1,53 +0,0 @@ -#!perl -w -use File::DosGlob; -$| = 1; -while (@ARGV) { - my $arg = shift; - my @m = File::DosGlob::doglob(1,$arg); - print (@m ? join("\0", sort @m) : $arg); - print "\0" if @ARGV; -} -__END__ - -=head1 NAME - -perlglob.bat - a more capable perlglob.exe replacement - -=head1 SYNOPSIS - - @perlfiles = glob "..\\pe?l/*.p?"; - print <..\\pe?l/*.p?>; - - # more efficient version - > perl -MFile::DosGlob=glob -e "print <../pe?l/*.p?>" - -=head1 DESCRIPTION - -This file is a portable replacement for perlglob.exe. It -is largely compatible with perlglob.exe (the Microsoft setargv.obj -version) in all but one respect--it understands wildcards in -directory components. - -It prints null-separated filenames to standard output. - -For details of the globbing features implemented, see -L<File::DosGlob>. - -While one may replace perlglob.exe with this, usage by overriding -CORE::glob with File::DosGlob::glob should be much more efficient, -because it avoids launching a separate process, and is therefore -strongly recommended. See L<perlsub> for details of overriding -builtins. - -=head1 AUTHOR - -Gurusamy Sarathy <gsar@activestate.com> - -=head1 SEE ALSO - -perl - -File::DosGlob - -=cut - diff --git a/wince/bin/pl2bat.pl b/wince/bin/pl2bat.pl deleted file mode 100644 index d70a316676..0000000000 --- a/wince/bin/pl2bat.pl +++ /dev/null @@ -1,412 +0,0 @@ - eval 'exec perl -x -S "$0" ${1+"$@"}' - if 0; # In case running under some shell - -require 5; -use Getopt::Std; -use Config; - -$0 =~ s|.*[/\\]||; - -my $usage = <<EOT; -Usage: $0 [-h] - or: $0 [-w] [-u] [-a argstring] [-s stripsuffix] [files] - or: $0 [-w] [-u] [-n ntargs] [-o otherargs] [-s stripsuffix] [files] - -n ntargs arguments to invoke perl with in generated file - when run from Windows NT. Defaults to - '-x -S "%0" %*'. - -o otherargs arguments to invoke perl with in generated file - other than when run from Windows NT. Defaults - to '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'. - -a argstring arguments to invoke perl with in generated file - ignoring operating system (for compatibility - with previous pl2bat versions). - -u update files that may have already been processed - by (some version of) pl2bat. - -w include "-w" on the /^#!.*perl/ line (unless - a /^#!.*perl/ line was already present). - -s stripsuffix strip this suffix from file before appending ".bat" - Not case-sensitive - Can be a regex if it begins with `/' - Defaults to "/\.plx?/" - -h show this help -EOT - -my %OPT = (); -warn($usage), exit(0) if !getopts('whun:o:a:s:',\%OPT) or $OPT{'h'}; -$OPT{'n'} = '-x -S "%0" %*' unless exists $OPT{'n'}; -$OPT{'o'} = '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9' unless exists $OPT{'o'}; -$OPT{'s'} = '/\\.plx?/' unless exists $OPT{'s'}; -$OPT{'s'} = ($OPT{'s'} =~ m#^/([^/]*[^/\$]|)\$?/?$# ? $1 : "\Q$OPT{'s'}\E"); - -my $head; -if( defined( $OPT{'a'} ) ) { - $head = <<EOT; - \@rem = '--*-Perl-*-- - \@echo off - perl $OPT{'a'} - goto endofperl - \@rem '; -EOT -} else { - $head = <<EOT; - \@rem = '--*-Perl-*-- - \@echo off - if "%OS%" == "Windows_NT" goto WinNT - perl $OPT{'o'} - goto endofperl - :WinNT - perl $OPT{'n'} - if NOT "%COMSPEC%" == "%SystemRoot%\\system32\\cmd.exe" goto endofperl - if %errorlevel% == 9009 echo You do not have Perl in your PATH. - if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul - goto endofperl - \@rem '; -EOT -} -$head =~ s/^\t//gm; -my $headlines = 2 + ($head =~ tr/\n/\n/); -my $tail = "\n__END__\n:endofperl\n"; - -@ARGV = ('-') unless @ARGV; - -foreach ( @ARGV ) { - process($_); -} - -sub process { - my( $file )= @_; - my $myhead = $head; - my $linedone = 0; - my $taildone = 0; - my $linenum = 0; - my $skiplines = 0; - my $line; - my $start= $Config{startperl}; - $start= "#!perl" unless $start =~ /^#!.*perl/; - open( FILE, $file ) or die "$0: Can't open $file: $!"; - @file = <FILE>; - foreach $line ( @file ) { - $linenum++; - if ( $line =~ /^:endofperl\b/ ) { - if( ! exists $OPT{'u'} ) { - warn "$0: $file has already been converted to a batch file!\n"; - return; - } - $taildone++; - } - if ( not $linedone and $line =~ /^#!.*perl/ ) { - if( exists $OPT{'u'} ) { - $skiplines = $linenum - 1; - $line .= "#line ".(1+$headlines)."\n"; - } else { - $line .= "#line ".($linenum+$headlines)."\n"; - } - $linedone++; - } - if ( $line =~ /^#\s*line\b/ and $linenum == 2 + $skiplines ) { - $line = ""; - } - } - close( FILE ); - $file =~ s/$OPT{'s'}$//oi; - $file .= '.bat' unless $file =~ /\.bat$/i or $file =~ /^-$/; - open( FILE, ">$file" ) or die "Can't open $file: $!"; - print FILE $myhead; - print FILE $start, ( $OPT{'w'} ? " -w" : "" ), - "\n#line ", ($headlines+1), "\n" unless $linedone; - print FILE @file[$skiplines..$#file]; - print FILE $tail unless $taildone; - close( FILE ); -} -__END__ - -=head1 NAME - -pl2bat - wrap perl code into a batch file - -=head1 SYNOPSIS - -B<pl2bat> B<-h> - -B<pl2bat> [B<-w>] S<[B<-a> I<argstring>]> S<[B<-s> I<stripsuffix>]> [files] - -B<pl2bat> [B<-w>] S<[B<-n> I<ntargs>]> S<[B<-o> I<otherargs>]> S<[B<-s> I<stripsuffix>]> [files] - -=head1 DESCRIPTION - -This utility converts a perl script into a batch file that can be -executed on DOS-like operating systems. This is intended to allow -you to use a Perl script like regular programs and batch files where -you just enter the name of the script [probably minus the extension] -plus any command-line arguments and the script is found in your B<PATH> -and run. - -=head2 ADVANTAGES - -There are several alternatives to this method of running a Perl script. -They each have disadvantages that help you understand the motivation -for using B<pl2bat>. - -=over - -=item 1 - - C:> perl x:/path/to/script.pl [args] - -=item 2 - - C:> perl -S script.pl [args] - -=item 3 - - C:> perl -S script [args] - -=item 4 - - C:> ftype Perl=perl.exe "%1" %* - C:> assoc .pl=Perl - then - C:> script.pl [args] - -=item 5 - - C:> ftype Perl=perl.exe "%1" %* - C:> assoc .pl=Perl - C:> set PathExt=%PathExt%;.PL - then - C:> script [args] - -=back - -B<1> and B<2> are the most basic invocation methods that should work on -any system [DOS-like or not]. They require extra typing and require -that the script user know that the script is written in Perl. This -is a pain when you have lots of scripts, some written in Perl and some -not. It can be quite difficult to keep track of which scripts need to -be run through Perl and which do not. Even worse, scripts often get -rewritten from simple batch files into more powerful Perl scripts in -which case these methods would require all existing users of the scripts -be updated. - -B<3> works on modern Win32 versions of Perl. It allows the user to -omit the ".pl" or ".bat" file extension, which is a minor improvement. - -B<4> and B<5> work on some Win32 operating systems with some command -shells. One major disadvantage with both is that you can't use them -in pipelines nor with file redirection. For example, none of the -following will work properly if you used method B<4> or B<5>: - - C:> script.pl <infile - C:> script.pl >outfile - C:> echo y | script.pl - C:> script.pl | more - -This is due to a Win32 bug which Perl has no control over. This bug -is the major motivation for B<pl2bat> [which was originally written -for DOS] being used on Win32 systems. - -Note also that B<5> works on a smaller range of combinations of Win32 -systems and command shells while B<4> requires that the user know -that the script is a Perl script [because the ".pl" extension must -be entered]. This makes it hard to standardize on either of these -methods. - -=head2 DISADVANTAGES - -There are several potential traps you should be aware of when you -use B<pl2bat>. - -The generated batch file is initially processed as a batch file each -time it is run. This means that, to use it from within another batch -file you should precede it with C<call> or else the calling batch -file will not run any commands after the script: - - call script [args] - -Except under Windows NT, if you specify more than 9 arguments to -the generated batch file then the 10th and subsequent arguments -are silently ignored. - -Except when using F<CMD.EXE> under Windows NT, if F<perl.exe> is not -in your B<PATH>, then trying to run the script will give you a generic -"Command not found"-type of error message that will probably make you -think that the script itself is not in your B<PATH>. When using -F<CMD.EXE> under Windows NT, the generic error message is followed by -"You do not have Perl in your PATH", to make this clearer. - -On most DOS-like operating systems, the only way to exit a batch file -is to "fall off the end" of the file. B<pl2bat> implements this by -doing C<goto :endofperl> and adding C<__END__> and C<:endofperl> as -the last two lines of the generated batch file. This means: - -=over - -=item No line of your script should start with a colon. - -In particular, for this version of B<pl2bat>, C<:endofperl>, -C<:WinNT>, and C<:script_failed_so_exit_with_non_zero_val> should not -be used. - -=item Care must be taken when using C<__END__> and the C<DATA> file handle. - -One approach is: - - . #!perl - . while( <DATA> ) { - . last if /^__END__$/; - . [...] - . } - . __END__ - . lines of data - . to be processed - . __END__ - . :endofperl - -The dots in the first column are only there to prevent F<cmd.exe> to interpret -the C<:endofperl> line in this documentation. Otherwise F<pl2bat.bat> itself -wouldn't work. See the previous item. :-) - -=item The batch file always "succeeds" - -The following commands illustrate the problem: - - C:> echo exit(99); >fail.pl - C:> pl2bat fail.pl - C:> perl -e "print system('perl fail.pl')" - 99 - C:> perl -e "print system('fail.bat')" - 0 - -So F<fail.bat> always reports that it completed successfully. Actually, -under Windows NT, we have: - - C:> perl -e "print system('fail.bat')" - 1 - -So, for Windows NT, F<fail.bat> fails when the Perl script fails, but -the return code is always C<1>, not the return code from the Perl script. - -=back - -=head2 FUNCTION - -By default, the ".pl" suffix will be stripped before adding a ".bat" suffix -to the supplied file names. This can be controlled with the C<-s> option. - -The default behavior is to have the batch file compare the C<OS> -environment variable against C<"Windows_NT">. If they match, it -uses the C<%*> construct to refer to all the command line arguments -that were given to it, so you'll need to make sure that works on your -variant of the command shell. It is known to work in the F<CMD.EXE> shell -under Windows NT. 4DOS/NT users will want to put a C<ParameterChar = *> -line in their initialization file, or execute C<setdos /p*> in -the shell startup file. - -On Windows95 and other platforms a nine-argument limit is imposed -on command-line arguments given to the generated batch file, since -they may not support C<%*> in batch files. - -These can be overridden using the C<-n> and C<-o> options or the -deprecated C<-a> option. - -=head1 OPTIONS - -=over 8 - -=item B<-n> I<ntargs> - -Arguments to invoke perl with in generated batch file when run from -Windows NT (or Windows 98, probably). Defaults to S<'-x -S "%0" %*'>. - -=item B<-o> I<otherargs> - -Arguments to invoke perl with in generated batch file except when -run from Windows NT (ie. when run from DOS, Windows 3.1, or Windows 95). -Defaults to S<'-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'>. - -=item B<-a> I<argstring> - -Arguments to invoke perl with in generated batch file. Specifying -B<-a> prevents the batch file from checking the C<OS> environment -variable to determine which operating system it is being run from. - -=item B<-s> I<stripsuffix> - -Strip a suffix string from file name before appending a ".bat" -suffix. The suffix is not case-sensitive. It can be a regex if -it begins with `/' (the trailing '/' is optional and a trailing -C<$> is always assumed). Defaults to C</.plx?/>. - -=item B<-w> - -If no line matching C</^#!.*perl/> is found in the script, then such -a line is inserted just after the new preamble. The exact line -depends on C<$Config{startperl}> [see L<Config>]. With the B<-w> -option, C<" -w"> is added after the value of C<$Config{startperl}>. -If a line matching C</^#!.*perl/> already exists in the script, -then it is not changed and the B<-w> option is ignored. - -=item B<-u> - -If the script appears to have already been processed by B<pl2bat>, -then the script is skipped and not processed unless B<-u> was -specified. If B<-u> is specified, the existing preamble is replaced. - -=item B<-h> - -Show command line usage. - -=back - -=head1 EXAMPLES - - C:\> pl2bat foo.pl bar.PM - [..creates foo.bat, bar.PM.bat..] - - C:\> pl2bat -s "/\.pl|\.pm/" foo.pl bar.PM - [..creates foo.bat, bar.bat..] - - C:\> pl2bat < somefile > another.bat - - C:\> pl2bat > another.bat - print scalar reverse "rekcah lrep rehtona tsuj\n"; - ^Z - [..another.bat is now a certified japh application..] - - C:\> ren *.bat *.pl - C:\> pl2bat -u *.pl - [..updates the wrapping of some previously wrapped scripts..] - - C:\> pl2bat -u -s .bat *.bat - [..same as previous example except more dangerous..] - -=head1 BUGS - -C<$0> will contain the full name, including the ".bat" suffix -when the generated batch file runs. If you don't like this, -see runperl.bat for an alternative way to invoke perl scripts. - -Default behavior is to invoke Perl with the B<-S> flag, so Perl will -search the B<PATH> to find the script. This may have undesirable -effects. - -On really old versions of Win32 Perl, you can't run the script -via - - C:> script.bat [args] - -and must use - - C:> script [args] - -A loop should be used to build up the argument list when not on -Windows NT so more than 9 arguments can be processed. - -See also L</Disadvantages>. - -=head1 SEE ALSO - -perl, perlwin32, runperl.bat - -=cut - diff --git a/wince/bin/runperl.pl b/wince/bin/runperl.pl deleted file mode 100644 index 95b33f9342..0000000000 --- a/wince/bin/runperl.pl +++ /dev/null @@ -1,67 +0,0 @@ -#!perl -w -$0 =~ s|\.bat||i; -unless (-f $0) { - $0 =~ s|.*[/\\]||; - for (".", split ';', $ENV{PATH}) { - $_ = "." if $_ eq ""; - $0 = "$_/$0" , goto doit if -f "$_/$0"; - } - die "`$0' not found.\n"; -} -doit: exec "perl", "-x", $0, @ARGV; -die "Failed to exec `$0': $!"; -__END__ - -=head1 NAME - -runperl.bat - "universal" batch file to run perl scripts - -=head1 SYNOPSIS - - C:\> copy runperl.bat foo.bat - C:\> foo - [..runs the perl script `foo'..] - - C:\> foo.bat - [..runs the perl script `foo'..] - - -=head1 DESCRIPTION - -This file can be copied to any file name ending in the ".bat" suffix. -When executed on a DOS-like operating system, it will invoke the perl -script of the same name, but without the ".bat" suffix. It will -look for the script in the same directory as itself, and then in -the current directory, and then search the directories in your PATH. - -It relies on the C<exec()> operator, so you will need to make sure -that works in your perl. - -This method of invoking perl scripts has some advantages over -batch-file wrappers like C<pl2bat.bat>: it avoids duplication -of all the code; it ensures C<$0> contains the same name as the -executing file, without any egregious ".bat" suffix; it allows -you to separate your perl scripts from the wrapper used to -run them; since the wrapper is generic, you can use symbolic -links to simply link to C<runperl.bat>, if you are serving your -files on a filesystem that supports that. - -On the other hand, if the batch file is invoked with the ".bat" -suffix, it does an extra C<exec()>. This may be a performance -issue. You can avoid this by running it without specifying -the ".bat" suffix. - -Perl is invoked with the -x flag, so the script must contain -a C<#!perl> line. Any flags found on that line will be honored. - -=head1 BUGS - -Perl is invoked with the -S flag, so it will search the PATH to find -the script. This may have undesirable effects. - -=head1 SEE ALSO - -perl, perlwin32, pl2bat.bat - -=cut - diff --git a/wince/bin/search.pl b/wince/bin/search.pl deleted file mode 100644 index ad74001be5..0000000000 --- a/wince/bin/search.pl +++ /dev/null @@ -1,1866 +0,0 @@ -#!/usr/local/bin/perl -w -'di'; -'ig00'; -############################################################################## -## -## search -## -## Jeffrey Friedl (jfriedl@omron.co.jp), Dec 1994. -## Copyright 19.... ah hell, just take it. -## -## BLURB: -## A combo of find and grep -- more or less do a 'grep' on a whole -## directory tree. Fast, with lots of options. Much more powerful than -## the simple "find ... | xargs grep ....". Has a full man page. -## Powerfully customizable. -## -## This file is big, but mostly comments and man page. -## -## See man page for usage info. -## Return value: 2=error, 1=nothing found, 0=something found. -## - -$version = "950918.5"; -## -## "950918.5"; -## Changed all 'sysread' to 'read' because Linux perl's don't seem -## to like sysread() -## -## "941227.4"; -## Added -n, -u -## -## "941222.3" -## Added -nice (due to Lionel Cons <Lionel.Cons@cern.ch>) -## Removed any leading "./" from name. -## Added default flags for ~/.search, including TTY, -nice, -list, etc. -## Program name now has path removed when printed in diagnostics. -## Added simple tilde-expansion to -dir arg. -## Added -dskip, etc. Fixed -iregex bug. -## Changed -dir to be additive, adding -ddir. -## Now screen out devices, pipes, and sockets. -## More tidying and lots of expanding of the man page -## -## -## "941217.2"; -## initial release. - -$stripped=0; - -&init; -$rc_file = join('/', $ENV{'HOME'}, ".search"); - -&check_args; - -## Make sure we've got a regex. -## Don't need one if -find or -showrc was specified. -$!=2, die "expecting regex arguments.\n" - if $FIND_ONLY == 0 && $showrc == 0 && @ARGV == 0; - -&prepare_to_search($rc_file); - -&import_program if !defined &dodir; ## BIG key to speed. - -## do search while there are directories to be done. -&dodir(shift(@todo)) while @todo; - -&clear_message if $VERBOSE && $STDERR_IS_TTY; -exit($retval); -############################################################################### - -sub init -{ - ## initialize variables that might be reset by command-line args - $DOREP=0; ## set true by -dorep (redo multi-hardlink files) - $DOREP=1 if $^O eq 'MSWin32'; - $DO_SORT=0; ## set by -sort (sort files in a dir before checking) - $FIND_ONLY=0; ## set by -find (don't search files) - $LIST_ONLY=0; ## set true by -l (list filenames only) - $NEWER=0; ## set by -newer, "-mtime -###" - $NICE=0; ## set by -nice (print human-readable output) - $NOLINKS=0; ## set true by -nolinks (don't follow symlinks) - $OLDER=0; ## set by -older, "-mtime ###" - $PREPEND_FILENAME=1; ## set false by -h (don't prefix lines with filename) - $REPORT_LINENUM=0; ## set true by -n (show line numbers) - $VERBOSE=0; ## set to a value by -v, -vv, etc. (verbose messages) - $WHY=0; ## set true by -why, -vvv+ (report why skipped) - $XDEV=0; ## set true by -xdev (stay on one filesystem) - $all=0; ## set true by -all (don't skip many kinds of files) - $iflag = ''; ## set to 'i' by -i (ignore case); - $norc=0; ## set by -norc (don't load rc file) - $showrc=0; ## set by -showrc (show what happens with rc file) - $underlineOK=0; ## set true by -u (watch for underline stuff) - $words=0; ## set true by -w (match whole-words only) - $DELAY=0; ## inter-file delay (seconds) - $retval=1; ## will set to 0 if we find anything. - - ## various elements of stat() that we might access - $STAT_DEV = 1; - $STAT_INODE = 2; - $STAT_MTIME = 9; - - $VV_PRINT_COUNT = 50; ## with -vv, print every VV_PRINT_COUNT files, or... - $VV_SIZE = 1024*1024; ## ...every VV_SIZE bytes searched - $vv_print = $vv_size = 0; ## running totals. - - ## set default options, in case the rc file wants them - $opt{'TTY'}= 1 if -t STDOUT; - - ## want to know this for debugging message stuff - $STDERR_IS_TTY = -t STDERR ? 1 : 0; - $STDERR_SCREWS_STDOUT = ($STDERR_IS_TTY && -t STDOUT) ? 1 : 0; - - $0 =~ s,.*/,,; ## clean up $0 for any diagnostics we'll be printing. -} - -## -## Check arguments. -## -sub check_args -{ - while (@ARGV && $ARGV[0] =~ m/^-/) - { - $arg = shift(@ARGV); - - if ($arg eq '-version' || ($VERBOSE && $arg eq '-help')) { - print qq/Jeffrey's file search, version "$version".\n/; - exit(0) unless $arg eq '-help'; - } - if ($arg eq '-help') { - print <<INLINE_LITERAL_TEXT; -usage: $0 [options] [-e] [PerlRegex ....] -OPTIONS TELLING *WHERE* TO SEARCH: - -dir DIR start search at the named directory (default is current dir). - -xdev stay on starting file system. - -sort sort the files in each directory before processing. - -nolinks don't follow symbolic links. -OPTIONS TELLING WHICH FILES TO EVEN CONSIDER: - -mtime # consider files modified > # days ago (-# for < # days old) - -newer FILE consider files modified more recently than FILE (also -older) - -name GLOB consider files whose name matches pattern (also -regex). - -skip GLOB opposite of -name: identifies files to not consider. - -path GLOB like -name, but for files whose whole path is described. - -dpath/-dregex/-dskip versions for selecting or pruning directories. - -all don't skip any files marked to be skipped by the startup file. - -x<SPECIAL> (see manual, and/or try -showrc). - -why report why a file isn't checked (also implied by -vvvv). -OPTIONS TELLING WHAT TO DO WITH FILES THAT WILL BE CONSIDERED: - -f | -find just list files (PerlRegex ignored). Default is to grep them. - -ff | -ffind Does a faster -find (implies -find -all -dorep) -OPTIONS CONTROLLING HOW THE SEARCH IS DONE (AND WHAT IS PRINTED): - -l | -list only list files with matches, not the lines themselves. - -nice | -nnice print more "human readable" output. - -n prefix each output line with its line number in the file. - -h don't prefix output lines with file name. - -u also look "inside" manpage-style underlined text - -i do case-insensitive searching. - -w match words only (as defined by perl's \\b). -OTHER OPTIONS: - -v, -vv, -vvv various levels of message verbosity. - -e end of options (in case a regex looks like an option). - -showrc show what the rc file sets, then exit. - -norc don't load the rc file. - -dorep check files with multiple hard links multiple times. -INLINE_LITERAL_TEXT - print "Use -v -help for more verbose help.\n" unless $VERBOSE; - print "This script file is also a man page.\n" unless $stripped; - print <<INLINE_LITERAL_TEXT if $VERBOSE; - -If -f (or -find) given, PerlRegex is optional and ignored. -Otherwise, will search for files with lines matching any of the given regexes. - -Combining things like -name and -mtime implies boolean AND. -However, duplicating things (such as -name '*.c' -name '*.txt') implies OR. - --mtime may be given floating point (i.e. 1.5 is a day and a half). --iskip/-idskip/-ipath/... etc are case-insensitive versions. - -If any letter in -newer/-older is upper case, "or equal" is -inserted into the test. - -You can always find the latest version on the World Wide Web in - http://www.wg.omron.co.jp/~jfriedl/perl/ -INLINE_LITERAL_TEXT - exit(0); - } - $DOREP=1, next if $arg eq '-dorep'; ## do repeats - $DO_SORT=1, next if $arg eq '-sort'; ## sort files - $NOLINKS=1, next if $arg eq '-nolinks'; ## no sym. links - $PREPEND_FILENAME=0, next if $arg eq '-h'; ## no filename prefix - $REPORT_LINENUM=1, next if $arg eq '-n'; ## show line numbers - $WHY=1, next if $arg eq '-why'; ## tell why skipped - $XDEV=1, next if $arg eq '-xdev'; ## don't leave F.S. - $all=1,$opt{'-all'}=1,next if $arg eq '-all'; ## don't skip *.Z, etc - $iflag='i', next if $arg eq '-i'; ## ignore case - $norc=1, next if $arg eq '-norc'; ## don't load rc file - $showrc=1, next if $arg eq '-showrc'; ## show rc file - $underlineOK=1, next if $arg eq '-u'; ## look throuh underln. - $words=1, next if $arg eq '-w'; ## match "words" only - &strip if $arg eq '-strip'; ## dump this program - last if $arg eq '-e'; - $DELAY=$1, next if $arg =~ m/-delay(\d+)/; - - $FIND_ONLY=1, next if $arg =~/^-f(ind)?$/;## do "find" only - - $FIND_ONLY=1, $DOREP=1, $all=1, - next if $arg =~/^-ff(ind)?$/;## fast -find - $LIST_ONLY=1,$opt{'-list'}=1, - next if $arg =~/^-l(ist)?$/;## only list files - - if ($arg =~ m/^-(v+)$/) { ## verbosity - $VERBOSE =length($1); - foreach $len (1..$VERBOSE) { $opt{'-'.('v' x $len)}=1 } - next; - } - if ($arg =~ m/^-(n+)ice$/) { ## "nice" output - $NICE =length($1); - foreach $len (1..$NICE) { $opt{'-'.('n' x $len).'ice'}=1 } - next; - } - - if ($arg =~ m/^-(i?)(d?)skip$/) { - local($i) = $1 eq 'i'; - local($d) = $2 eq 'd'; - $! = 2, die qq/$0: expecting glob arg to -$arg\n/ unless @ARGV; - foreach (split(/\s+/, shift @ARGV)) { - if ($d) { - $idskip{$_}=1 if $i; - $dskip{$_}=1; - } else { - $iskip{$_}=1 if $i; - $skip{$_}=1; - } - } - next; - } - - - if ($arg =~ m/^-(i?)(d?)(regex|path|name)$/) { - local($i) = $1 eq 'i'; - $! = 2, die qq/$0: expecting arg to -$arg\n/ unless @ARGV; - foreach (split(/\s+/, shift @ARGV)) { - $iname{join(',', $arg, $_)}=1 if $i; - $name{join(',', $arg, $_)}=1; - } - next; - } - - if ($arg =~ m/^-d?dir$/) { - $opt{'-dir'}=1; - $! = 2, die qq/$0: expecting filename arg to -$arg\n/ unless @ARGV; - $start = shift(@ARGV); - $start =~ s#^~(/+|$)#$ENV{'HOME'}$1# if defined $ENV{'HOME'}; - $! = 2, die qq/$0: can't find ${arg}'s "$start"\n/ unless -e $start; - $! = 2, die qq/$0: ${arg}'s "$start" not a directory.\n/ unless -d _; - undef(@todo), $opt{'-ddir'}=1 if $arg eq '-ddir'; - push(@todo, $start); - next; - } - - if ($arg =~ m/^-(new|old)er$/i) { - $! = 2, die "$0: expecting filename arg to -$arg\n" unless @ARGV; - local($file, $time) = shift(@ARGV); - $! = 2, die qq/$0: can't stat -${arg}'s "$file"./ - unless $time = (stat($file))[$STAT_MTIME]; - local($upper) = $arg =~ tr/A-Z//; - if ($arg =~ m/new/i) { - $time++ unless $upper; - $NEWER = $time if $NEWER < $time; - } else { - $time-- unless $upper; - $OLDER = $time if $OLDER == 0 || $OLDER > $time; - } - next; - } - - if ($arg =~ m/-mtime/) { - $! = 2, die "$0: expecting numerical arg to -$arg\n" unless @ARGV; - local($days) = shift(@ARGV); - $! = 2, die qq/$0: inappropriate arg ($days) to $arg\n/ if $days==0; - $days *= 3600 * 24; - if ($days < 0) { - local($time) = $^T + $days; - $NEWER = $time if $NEWER < $time; - } else { - local($time) = $^T - $days; - $OLDER = $time if $OLDER == 0 || $OLDER > $time; - } - next; - } - - ## special user options - if ($arg =~ m/^-x(.+)/) { - foreach (split(/[\s,]+/, $1)) { $user_opt{$_} = $opt{$_}= 1; } - next; - } - - $! = 2, die "$0: unknown arg [$arg]\n"; - } -} - -## -## Given a filename glob, return a regex. -## If the glob has no globbing chars (no * ? or [..]), then -## prepend an effective '*' to it. -## -sub glob_to_regex -{ - local($glob) = @_; - local(@parts) = $glob =~ m/\\.|[*?]|\[]?[^]]*]|[^[\\*?]+/g; - local($trueglob)=0; - foreach (@parts) { - if ($_ eq '*' || $_ eq '?') { - $_ = ".$_"; - $trueglob=1; ## * and ? are a real glob - } elsif (substr($_, 0, 1) eq '[') { - $trueglob=1; ## [..] is a real glob - } else { - s/^\\//; ## remove any leading backslash; - s/\W/\\$&/g; ## now quote anything dangerous; - } - } - unshift(@parts, '.*') unless $trueglob; - join('', '^', @parts, '$'); -} - -sub prepare_to_search -{ - local($rc_file) = @_; - - $HEADER_BYTES=0; ## Might be set nonzero in &read_rc; - $last_message_length = 0; ## For &message and &clear_message. - - &read_rc($rc_file, $showrc) unless $norc; - exit(0) if $showrc; - - $NEXT_DIR_ENTRY = $DO_SORT ? 'shift @files' : 'readdir(DIR)'; - $WHY = 1 if $VERBOSE > 3; ## Arg -vvvv or above implies -why. - @todo = ('.') if @todo == 0; ## Where we'll start looking - - ## see if any user options were specified that weren't accounted for - foreach $opt (keys %user_opt) { - next if defined $seen_opt{$opt}; - warn "warning: -x$opt never considered.\n"; - } - - die "$0: multiple time constraints exclude all possible files.\n" - if ($NEWER && $OLDER) && ($NEWER > $OLDER); - - ## - ## Process any -skip/-iskip args that had been given - ## - local(@skip_test); - foreach $glob (keys %skip) { - $i = defined($iskip{$glob}) ? 'i': ''; - push(@skip_test, '$name =~ m/'. &glob_to_regex($glob). "/$i"); - } - if (@skip_test) { - $SKIP_TEST = join('||',@skip_test); - $DO_SKIP_TEST = 1; - } else { - $DO_SKIP_TEST = $SKIP_TEST = 0; - } - - ## - ## Process any -dskip/-idskip args that had been given - ## - local(@dskip_test); - foreach $glob (keys %dskip) { - $i = defined($idskip{$glob}) ? 'i': ''; - push(@dskip_test, '$name =~ m/'. &glob_to_regex($glob). "/$i"); - } - if (@dskip_test) { - $DSKIP_TEST = join('||',@dskip_test); - $DO_DSKIP_TEST = 1; - } else { - $DO_DSKIP_TEST = $DSKIP_TEST = 0; - } - - - ## - ## Process any -name, -path, -regex, etc. args that had been given. - ## - undef @name_test; - undef @dname_test; - foreach $key (keys %name) { - local($type, $pat) = split(/,/, $key, 2); - local($i) = defined($iname{$key}) ? 'i' : ''; - if ($type =~ /regex/) { - $pat =~ s/!/\\!/g; - $test = "\$name =~ m!^$pat\$!$i"; - } else { - local($var) = $type eq 'name' ? '$name' : '$file'; - $test = "$var =~ m/". &glob_to_regex($pat). "/$i"; - } - if ($type =~ m/^-i?d/) { - push(@dname_test, $test); - } else { - push(@name_test, $test); - } - } - if (@name_test) { - $GLOB_TESTS = join('||', @name_test); - - $DO_GLOB_TESTS = 1; - } else { - $GLOB_TESTS = $DO_GLOB_TESTS = 0; - } - if (@dname_test) { - $DGLOB_TESTS = join('||', @dname_test); - $DO_DGLOB_TESTS = 1; - } else { - $DGLOB_TESTS = $DO_DGLOB_TESTS = 0; - } - - - ## - ## Process any 'magic' things from the startup file. - ## - if (@magic_tests && $HEADER_BYTES) { - ## the $magic' one is for when &dodir is not inlined - $tests = join('||',@magic_tests); - $MAGIC_TESTS = " { package magic; \$val = ($tests) }"; - $DO_MAGIC_TESTS = 1; - } else { - $MAGIC_TESTS = 1; - $DO_MAGIC_TESTS = 0; - } - - ## - ## Prepare regular expressions. - ## - { - local(@regex_tests); - - if ($LIST_ONLY) { - $mflag = ''; - ## need to have $* set, but perl5 just won''t shut up about it. - if ($] >= 5) { - $mflag = 'm'; - } else { - eval ' $* = 1 '; - } - } - - ## - ## Until I figure out a better way to deal with it, - ## We have to worry about a regex like [^xyz] when doing $LIST_ONLY. - ## Such a regex *will* match \n, and if I'm pulling in multiple - ## lines, it can allow lines to match that would otherwise not match. - ## - ## Therefore, if there is a '[^' in a regex, we can NOT take a chance - ## an use the fast listonly. - ## - $CAN_USE_FAST_LISTONLY = $LIST_ONLY; - - local(@extra); - local($underline_glue) = ($] >= 5) ? '(:?_\cH)?' : '(_\cH)?'; - while (@ARGV) { - $regex = shift(@ARGV); - ## - ## If watching for underlined things too, add another regex. - ## - if ($underlineOK) { - if ($regex =~ m/[?*+{}()\\.|^\$[]/) { - warn "$0: warning, can't underline-safe ``$regex''.\n"; - } else { - $regex = join($underline_glue, split(//, $regex)); - } - } - - ## If nothing special in the regex, just use index... - ## is quite a bit faster. - if (($iflag eq '') && ($words == 0) && - $regex !~ m/[?*+{}()\\.|^\$[]/) - { - push(@regex_tests, "(index(\$_, q+$regex+)>=0)"); - - } else { - $regex =~ s#[\$\@\/]\w#\\$&#; - if ($words) { - if ($regex =~ m/\|/) { - ## could be dangerous -- see if we can wrap in parens. - if ($regex =~ m/\\\d/) { - warn "warning: -w and a | in a regex is dangerous.\n" - } else { - $regex = join($regex, '(', ')'); - } - } - $regex = join($regex, '\b', '\b'); - } - $CAN_USE_FAST_LISTONLY = 0 if substr($regex, "[^") >= 0; - push(@regex_tests, "m/$regex/$iflag$mflag"); - } - - ## If we're done, but still have @extra to do, get set for that. - if (@ARGV == 0 && @extra) { - @ARGV = @extra; ## now deal with the extra stuff. - $underlineOK = 0; ## but no more of this. - undef @extra; ## or this. - } - } - if (@regex_tests) { - $REGEX_TEST = join('||', @regex_tests); - ## print STDERR $REGEX_TEST, "\n"; exit; - } else { - ## must be doing -find -- just give something syntactically correct. - $REGEX_TEST = 1; - } - } - - ## - ## Make sure we can read the first item(s). - ## - foreach $start (@todo) { - $! = 2, die qq/$0: can't stat "$start"\n/ - unless ($dev,$inode) = (stat($start))[$STAT_DEV,$STAT_INODE]; - - if (defined $dir_done{"$dev,$inode"}) { - ## ignore the repeat. - warn(qq/ignoring "$start" (same as "$dir_done{"$dev,$inode"}").\n/) - if $VERBOSE; - next; - } - - ## if -xdev was given, remember the device. - $xdev{$dev} = 1 if $XDEV; - - ## Note that we won't want to do it again - $dir_done{"$dev,$inode"} = $start; - } -} - - -## -## See the comment above the __END__ above the 'sub dodir' below. -## -sub import_program -{ - sub bad { - print STDERR "$0: internal error (@_)\n"; - exit 2; - } - - ## Read from data, up to next __END__. This will be &dodir. - local($/) = "\n__END__"; - $prog = <DATA>; - close(DATA); - - $prog =~ s/\beval\b//g; ## remove any 'eval' - - ## Inline uppercase $-variables by their current values. - if ($] >= 5) { - $prog =~ s/\$([A-Z][A-Z0-9_]{2,}\b)/ - &bad($1) if !defined ${$main::{$1}}; ${$main::{$1}};/eg; - } else { - $prog =~ s/\$([A-Z][A-Z0-9_]{2,}\b)/local(*VAR) = $_main{$1}; - &bad($1) if !defined $VAR; $VAR;/eg; - } - - eval $prog; ## now do it. This will define &dodir; - $!=2, die "$0 internal error: $@\n" if $@; -} - -########################################################################### - -## -## Read the .search file: -## Blank lines and lines that are only #-comments ignored. -## Newlines may be escaped to create long lines -## Other lines are directives. -## -## A directive may begin with an optional tag in the form <...> -## Things inside the <...> are evaluated as with: -## <(this || that) && must> -## will be true if -## -xmust -xthis or -xmust -xthat -## were specified on the command line (order doesn't matter, though) -## A directive is not done if there is a tag and it's false. -## Any characters but whitespace and &|()>,! may appear after an -x -## (although "-xdev" is special). -xmust,this is the same as -xmust -xthis. -## Something like -x~ would make <~> true, and <!~> false. -## -## Directives are in the form: -## option: STRING -## magic : NUMBYTES : EXPR -## -## With option: -## The STRING is parsed like a Bourne shell command line, and the -## options are used as if given on the command line. -## No comments are allowed on 'option' lines. -## Examples: -## # skip objects and libraries -## option: -skip '.o .a' -## # skip emacs *~ and *# files, unless -x~ given: -## <!~> option: -skip '~ #' -## -## With magic: -## EXPR can be pretty much any perl (comments allowed!). -## If it evaluates to true for any particular file, it is skipped. -## The only info you'll have about a file is the variable $H, which -## will have at least the first NUMBYTES of the file (less if the file -## is shorter than that, of course, and maybe more). You'll also have -## any variables you set in previous 'magic' lines. -## Examples: -## magic: 6 : ($x6 = substr($H, 0, 6)) eq 'GIF87a' -## magic: 6 : $x6 eq 'GIF89a' -## -## magic: 6 : (($x6 = substr($H, 0, 6)) eq 'GIF87a' ## old gif \ -## || $x6 eq 'GIF89a' ## new gif -## (the above two sets are the same) -## ## Check the first 32 bytes for "binarish" looking bytes. -## ## Don't blindly dump on any high-bit set, as non-ASCII text -## ## often has them set. \x80 and \xff seem to be special, though. -## ## Require two in a row to not get things like perl's $^T. -## ## This is known to get *.Z, *.gz, pkzip, *.elc and about any -## ## executable you'll find. -## magic: 32 : $H =~ m/[\x00-\x06\x10-\x1a\x1c-\x1f\x80\xff]{2}/ -## -sub read_rc -{ - local($file, $show) = @_; - local($line_num, $ln, $tag) = 0; - local($use_default, @default) = 0; - - { package magic; $ = 0; } ## turn off warnings for when we run EXPR's - - unless (open(RC, "$file")) { - $use_default=1; - $file = "<internal default startup file>"; - ## no RC file -- use this default. - @default = split(/\n/,<<'--------INLINE_LITERAL_TEXT'); - magic: 32 : $H =~ m/[\x00-\x06\x10-\x1a\x1c-\x1f\x80\xff]{2}/ - option: -skip '.a .COM .elc .EXE .gz .o .pbm .xbm .dvi' - option: -iskip '.tarz .zip .z .lzh .jpg .jpeg .gif .uu' - <!~> option: -skip '~ #' ---------INLINE_LITERAL_TEXT - } - - ## - ## Make an eval error pretty. - ## - sub clean_eval_error { - local($_) = @_; - s/ in file \(eval\) at line \d+,//g; ## perl4-style error - s/ at \(eval \d+\) line \d+,//g; ## perl5-style error - $_ = $` if m/\n/; ## remove all but first line - "$_\n"; - } - - print "reading RC file: $file\n" if $show; - - while (defined($_ = ($use_default ? shift(@default) : <RC>))) { - $ln = ++$line_num; ## note starting line num. - $_ .= <RC>, $line_num++ while s/\\\n?$/\n/; ## allow continuations - next if /^\s*(#.*)?$/; ## skip blank or comment-only lines. - $do = ''; - - ## look for an initial <...> tag. - if (s/^\s*<([^>]*)>//) { - ## This simple s// will make the tag ready to eval. - ($tag = $msg = $1) =~ - s/[^\s&|(!)]+/ - $seen_opt{$&}=1; ## note seen option - "defined(\$opt{q>$&>})" ## (q>> is safe quoting here) - /eg; - - ## see if the tag is true or not, abort this line if not. - $dothis = (eval $tag); - $!=2, die "$file $ln <$msg>: $_".&clean_eval_error($@) if $@; - - if ($show) { - $msg =~ s/[^\s&|(!)]+/-x$&/; - $msg =~ s/\s*!\s*/ no /g; - $msg =~ s/\s*&&\s*/ and /g; - $msg =~ s/\s*\|\|\s*/ or /g; - $msg =~ s/^\s+//; $msg =~ s/\s+$//; - $do = $dothis ? "(doing because $msg)" : - "(do if $msg)"; - } elsif (!$dothis) { - next; - } - } - - if (m/^\s*option\s*:\s*/) { - next if $all && !$show; ## -all turns off these checks; - local($_) = $'; - s/\n$//; - local($orig) = $_; - print " $do option: $_\n" if $show; - local($0) = "$0 ($file)"; ## for any error message. - local(@ARGV); - local($this); - ## - ## Parse $_ as a Bourne shell line -- fill @ARGV - ## - while (length) { - if (s/^\s+//) { - push(@ARGV, $this) if defined $this; - undef $this; - next; - } - $this = '' if !defined $this; - $this .= $1 while s/^'([^']*)'// || - s/^"([^"]*)"// || - s/^([^'"\s\\]+)//|| - s/^(\\[\D\d])//; - die "$file $ln: error parsing $orig at $_\n" if m/^\S/; - } - push(@ARGV, $this) if defined $this; - &check_args; - die qq/$file $ln: unused arg "@ARGV".\n/ if @ARGV; - next; - } - - if (m/^\s*magic\s*:\s*(\d+)\s*:\s*/) { - next if $all && !$show; ## -all turns off these checks; - local($bytes, $check) = ($1, $'); - - if ($show) { - $check =~ s/\n?$/\n/; - print " $do contents: $check"; - } - ## Check to make sure the thing at least compiles. - eval "package magic; (\$H = '1'x \$main'bytes) && (\n$check\n)\n"; - $! = 2, die "$file $ln: ".&clean_eval_error($@) if $@; - - $HEADER_BYTES = $bytes if $bytes > $HEADER_BYTES; - push(@magic_tests, "(\n$check\n)"); - next; - } - $! = 2, die "$file $ln: unknown command\n"; - } - close(RC); -} - -sub message -{ - if (!$STDERR_IS_TTY) { - print STDERR $_[0], "\n"; - } else { - local($text) = @_; - $thislength = length($text); - if ($thislength >= $last_message_length) { - print STDERR $text, "\r"; - } else { - print STDERR $text, ' 'x ($last_message_length-$thislength),"\r"; - } - $last_message_length = $thislength; - } -} - -sub clear_message -{ - print STDERR ' ' x $last_message_length, "\r" if $last_message_length; - $vv_print = $vv_size = $last_message_length = 0; -} - -## -## Output a copy of this program with comments, extra whitespace, and -## the trailing man page removed. On an ultra slow machine, such a copy -## might load faster (but I can't tell any difference on my machine). -## -sub strip { - seek(DATA, 0, 0) || die "$0: can't reset internal pointer.\n"; - while(<DATA>) { - print, next if /INLINE_LITERAL_TEXT/.../INLINE_LITERAL_TEXT/; - ## must mention INLINE_LITERAL_TEXT on this line! - s/\#\#.*|^\s+|\s+$//; ## remove cruft - last if $_ eq '.00;'; - next if ($_ eq '') || ($_ eq "'di'") || ($_ eq "'ig00'"); - s/\$stripped=0;/\$stripped=1;/; - s/\s\s+/ /; ## squish multiple whitespaces down to one. - print $_, "\n"; - } - exit(0); -} - -## -## Just to shut up -w. Never executed. -## -sub dummy { - - 1 || &dummy || &dir_done || &bad || &message || $NEXT_DIR_ENTRY || - $DELAY || $VV_SIZE || $VV_PRINT_COUNT || $STDERR_SCREWS_STDOUT || - @files || @files || $magic'H || $magic'H || $xdev{''} || &clear_message; - -} - -## -## If the following __END__ is in place, what follows will be -## inlined when the program first starts up. Any $ variable name -## all in upper case, specifically, any string matching -## \$([A-Z][A-Z0-9_]{2,}\b -## will have the true value for that variable inlined. Also, any 'eval' is -## removed -## -## The idea is that when the whole thing is then eval'ed to define &dodir, -## the perl optimizer will make all the decisions that are based upon -## command-line options (such as $VERBOSE), since they'll be inlined as -## constants -## -## Also, and here's the big win, the tests for matching the regex, and a -## few others, are all inlined. Should be blinding speed here. -## -## See the read from <DATA> above for where all this takes place. -## But all-in-all, you *want* the __END__ here. Comment it out only for -## debugging.... -## - -__END__ - -## -## Given a directory, check all "appropriate" files in it. -## Shove any subdirectories into the global @todo, so they'll be done -## later. -## -## Be careful about adding any upper-case variables, as they are subject -## to being inlined. See comments above the __END__ above. -## -sub dodir -{ - local($dir) = @_; - $dir =~ s,/+$,,; ## remove any trailing slash. - unless (opendir(DIR, "$dir/.")) { - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - warn qq($0: can't opendir "$dir/".\n); - return; - } - - if ($VERBOSE) { - &message($dir); - $vv_print = $vv_size = 0; - } - - @files = sort readdir(DIR) if $DO_SORT; - - while (defined($name = eval $NEXT_DIR_ENTRY)) - { - next if $name eq '.' || $name eq '..'; ## never follow these. - - ## create full relative pathname. - $file = $dir eq '.' ? $name : "$dir/$name"; - - ## if link and skipping them, do so. - if ($NOLINKS && -l $file) { - warn qq/skip (symlink): $file\n/ if $WHY; - next; - } - - ## skip things unless files or directories - unless (-f $file || -d _) { - if ($WHY) { - $why = (-S _ && "socket") || - (-p _ && "pipe") || - (-b _ && "block special")|| - (-c _ && "char special") || "somekinda special"; - warn qq/skip ($why): $file\n/; - } - next; - } - - ## skip things we can't read - unless (-r _) { - if ($WHY) { - $why = (-l $file) ? "follow" : "read"; - warn qq/skip (can't $why): $file\n/; - } - next; - } - - ## skip things that are empty - unless (-s _ || -d _) { - warn qq/skip (empty): $file\n/ if $WHY; - next; - } - - ## Note file device & inode. If -xdev, skip if appropriate. - ($dev, $inode) = (stat(_))[$STAT_DEV, $STAT_INODE]; - if ($XDEV && defined $xdev{$dev}) { - warn qq/skip (other device): $file\n/ if $WHY; - next; - } - $id = "$dev,$inode"; - - ## special work for a directory - if (-d _) { - ## Do checks for directory file endings. - if ($DO_DSKIP_TEST && (eval $DSKIP_TEST)) { - warn qq/skip (-dskip): $file\n/ if $WHY; - next; - } - ## do checks for -name/-regex/-path tests - if ($DO_DGLOB_TESTS && !(eval $DGLOB_TESTS)) { - warn qq/skip (dirname): $file\n/ if $WHY; - next; - } - - ## _never_ redo a directory - if (defined $dir_done{$id} and $^O ne 'MSWin32') { - warn qq/skip (did as "$dir_done{$id}"): $file\n/ if $WHY; - next; - } - $dir_done{$id} = $file; ## mark it done. - unshift(@todo, $file); ## add to the list to do. - next; - } - if ($WHY == 0 && $VERBOSE > 1) { - if ($VERBOSE>2||$vv_print++>$VV_PRINT_COUNT||($vv_size+=-s _)>$VV_SIZE){ - &message($file); - $vv_print = $vv_size = 0; - } - } - - ## do time-related tests - if ($NEWER || $OLDER) { - $_ = (stat(_))[$STAT_MTIME]; - if ($NEWER && $_ < $NEWER) { - warn qq/skip (too old): $file\n/ if $WHY; - next; - } - if ($OLDER && $_ > $OLDER) { - warn qq/skip (too new): $file\n/ if $WHY; - next; - } - } - - ## do checks for file endings - if ($DO_SKIP_TEST && (eval $SKIP_TEST)) { - warn qq/skip (-skip): $file\n/ if $WHY; - next; - } - - ## do checks for -name/-regex/-path tests - if ($DO_GLOB_TESTS && !(eval $GLOB_TESTS)) { - warn qq/skip (filename): $file\n/ if $WHY; - next; - } - - - ## If we're not repeating files, - ## skip this one if we've done it, or note we're doing it. - unless ($DOREP) { - if (defined $file_done{$id}) { - warn qq/skip (did as "$file_done{$id}"): $file\n/ if $WHY; - next; - } - $file_done{$id} = $file; - } - - if ($DO_MAGIC_TESTS) { - if (!open(FILE_IN, $file)) { - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - warn qq/$0: can't open: $file\n/; - next; - } - unless (read(FILE_IN, $magic'H, $HEADER_BYTES)) { - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - warn qq/$0: can't read from "$file"\n"/; - close(FILE_IN); - next; - } - - eval $MAGIC_TESTS; - if ($magic'val) { - close(FILE_IN); - warn qq/skip (magic): $file\n/ if $WHY; - next; - } - seek(FILE_IN, 0, 0); ## reset for later <FILE_IN> - } - - if ($WHY != 0 && $VERBOSE > 1) { - if ($VERBOSE>2||$vv_print++>$VV_PRINT_COUNT||($vv_size+=-s _)>$VV_SIZE){ - &message($file); - $vv_print = $vv_size = 0; - } - } - - if ($DELAY) { - sleep($DELAY); - } - - if ($FIND_ONLY) { - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - print $file, "\n"; - $retval=0; ## we've found something - close(FILE_IN) if $DO_MAGIC_TESTS; - next; - } else { - ## if we weren't doing magic tests, file won't be open yet... - if (!$DO_MAGIC_TESTS && !open(FILE_IN, $file)) { - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - warn qq/$0: can't open: $file\n/; - next; - } - if ($LIST_ONLY && $CAN_USE_FAST_LISTONLY) { - ## - ## This is rather complex, but buys us a LOT when we're just - ## listing files and not the individual internal lines. - ## - local($size) = 4096; ## block-size in which to do reads - local($nl); ## will point to $_'s ending newline. - local($read); ## will be how many bytes read. - local($_) = ''; ## Starts out empty - local($hold); ## (see below) - - while (($read = read(FILE_IN,$_,$size,length($_)))||length($_)) - { - undef @parts; - ## if read a full block, but no newline, need to read more. - while ($read == $size && ($nl = rindex($_, "\n")) < 0) { - push(@parts, $_); ## save that part - $read = read(FILE_IN, $_, $size); ## keep trying - } - - ## - ## If we had to save parts, must now combine them together. - ## adjusting $nl to reflect the now-larger $_. This should - ## be a lot more efficient than using any kind of .= in the - ## loop above. - ## - if (@parts) { - local($lastlen) = length($_); #only need if $nl >= 0 - $_ = join('', @parts, $_); - $nl = length($_) - ($lastlen - $nl) if $nl >= 0; - } - - ## - ## If we're at the end of the file, then we can use $_ as - ## is. Otherwise, we need to remove the final partial-line - ## and save it so that it'll be at the beginning of the - ## next read (where the rest of the line will be layed in - ## right after it). $hold will be what we should save - ## until next time. - ## - if ($read != $size || $nl < 0) { - $hold = ''; - } else { - $hold = substr($_, $nl + 1); - substr($_, $nl + 1) = ''; - } - - ## - ## Now have a bunch of full lines in $_. Use it. - ## - if (eval $REGEX_TEST) { - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - print $file, "\n"; - $retval=0; ## we've found something - - last; - } - - ## Prepare for next read.... - $_ = $hold; - } - - } else { ## else not using faster block scanning..... - - $lines_printed = 0 if $NICE; - while (<FILE_IN>) { - study; - next unless (eval $REGEX_TEST); - - ## - ## We found a matching line. - ## - $retval=0; - &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT; - if ($LIST_ONLY) { - print $file, "\n"; - last; - } else { - ## prepare to print line. - if ($NICE && $lines_printed++ == 0) { - print '-' x 70, "\n" if $NICE > 1; - print $file, ":\n"; - } - - ## - ## Print all the prelim stuff. This looks less efficient - ## than it needs to be, but that's so that when the eval - ## is compiled (and the tests are optimized away), the - ## result will be less actual PRINTs than the more natural - ## way of doing these tests.... - ## - if ($NICE) { - if ($REPORT_LINENUM) { - print " line $.: "; - } else { - print " "; - } - } elsif ($REPORT_LINENUM && $PREPEND_FILENAME) { - print "$file,:$.: "; - } elsif ($PREPEND_FILENAME) { - print "$file: "; - } elsif ($REPORT_LINENUM) { - print "$.: "; - } - print $_; - print "\n" unless m/\n$/; - } - } - print "\n" if ($NICE > 1) && $lines_printed; - } - close(FILE_IN); - } - } - closedir(DIR); -} - -__END__ -.00; ## finish .ig - -'di \" finish diversion--previous line must be blank -.nr nl 0-1 \" fake up transition to first page again -.nr % 0 \" start at page 1 -.\"__________________NORMAL_MAN_PAGE_BELOW_________________ -.ll+10n -.TH search 1 "Dec 17, 1994" -.SH SEARCH -search \- search files (a'la grep) in a whole directory tree. -.SH SYNOPSIS -search [ grep-like and find-like options] [regex ....] -.SH DESCRIPTION -.I Search -is more or less a combo of 'find' and 'grep' (although the regular -expression flavor is that of the perl being used, which is closer to -egrep's than grep's). - -.I Search -does generally the same kind of thing that -.nf - find <blah blah> | xargs egrep <blah blah> -.fi -does, but is -.I much -more powerful and efficient (and intuitive, I think). - -This manual describes -.I search -as of version "941227.4". You can always find the latest version at -.nf - http://www.wg.omron.co.jp/~jfriedl/perl/index.html -.fi - -.SH "QUICK EXAMPLE" -Basic use is simple: -.nf - % search jeff -.fi -will search files in the current directory, and all sub directories, for -files that have "jeff" in them. The lines will be listed with the -containing file's name prepended. -.PP -If you list more than one regex, such as with -.nf - % search jeff Larry Randal+ 'Stoc?k' 'C.*son' -.fi -then a line containing any of the regexes will be listed. -This makes it effectively the same as -.nf - % search 'jeff|Larry|Randal+|Stoc?k|C.*son' -.fi -However, listing them separately is much more efficient (and is easier -to type). -.PP -Note that in the case of these examples, the -.B \-w -(list whole-words only) option would be useful. -.PP -Normally, various kinds of files are automatically removed from consideration. -If it has has a certain ending (such as ".tar", ".Z", ".o", .etc), or if -the beginning of the file looks like a binary, it'll be excluded. -You can control exactly how this works -- see below. One quick way to -override this is to use the -.B \-all -option, which means to consider all the files that would normally be -automatically excluded. -Or, if you're curious, you can use -.B \-why -to have notes about what files are skipped (and why) printed to stderr. - -.SH "BASIC OVERVIEW" -Normally, the search starts in the current directory, considering files in -all subdirectories. - -You can use the -.I ~/.search -file to control ways to automatically exclude files. -If you don't have this file, a default one will kick in, which automatically -add -.nf - -skip .o .Z .gif -.fi -(among others) to exclude those kinds of files (which you probably want to -skip when searching for text, as is normal). -Files that look to be be binary will also be excluded. - -Files ending with "#" and "~" will also be excluded unless the -.B -x~ -option is given. - -You can use -.B -showrc -to show what kinds of files will normally be skipped. -See the section on the startup file -for more info. - -You can use the -.B -all -option to indicate you want to consider all files that would otherwise be -skipped by the startup file. - -Based upon various other flags (see "WHICH FILES TO CONSIDER" below), -more files might be removed from consideration. For example -.nf - -mtime 3 -.fi -will exclude files that aren't at least three days old (change the 3 to -3 -to exclude files that are more than three days old), while -.nf - -skip .* -.fi -would exclude any file beginning with a dot (of course, '.' and '..' are -special and always excluded). - -If you'd like to see what files are being excluded, and why, you can get the -list via the -.B \-why -option. - -If a file makes it past all the checks, it is then "considered". -This usually means it is greped for the regular expressions you gave -on the command line. - -If any of the regexes match a line, the line is printed. -However, if -.B -list -is given, just the filename is printed. Or, if -.B -nice -is given, a somewhat more (human-)readable output is generated. - -If you're searching a huge tree and want to keep informed about how -the search is progressing, -.B -v -will print (to stderr) the current directory being searched. -Using -.B -vv -will also print the current file "every so often", which could be useful -if a directory is huge. Using -.B -vvv -will print the update with every file. - -Below is the full listing of options. - -.SH "OPTIONS TELLING *WHERE* TO SEARCH" -.TP -.BI -dir " DIR" -Start searching at the named directory instead of the current directory. -If multiple -.B -dir -arguments are given, multiple trees will be searched. -.TP -.BI -ddir " DIR" -Like -.B -dir -except it flushes any previous -.B -dir -directories (i.e. "-dir A -dir B -dir C" will search A, B, and C, while -"-dir A -ddir B -dir C" will search only B and C. This might be of use -in the startup file (see that section below). -.TP -.B -xdev -Stay on the same filesystem as the starting directory/directories. -.TP -.B -sort -Sort the items in a directory before processing them. -Normally they are processed in whatever order they happen to be read from -the directory. -.TP -.B -nolinks -Don't follow symbolic links. Normally they're followed. - -.SH "OPTIONS CONTROLLING WHICH FILES TO CONSIDER AND EXCLUDE" -.TP -.BI -mtime " NUM" -Only consider files that were last changed more than -.I NUM -days ago -(less than -.I NUM -days if -.I NUM -has '-' prepended, i.e. "-mtime -2.5" means to consider files that -have been changed in the last two and a half days). -.TP -.B -older FILE -Only consider files that have not changed since -.I FILE -was last changed. -If there is any upper case in the "-older", "or equal" is added to the sense -of the test. Therefore, "search -older ./file regex" will never consider -"./file", while "search -Older ./file regex" will. - -If a file is a symbolic link, the time used is that of the file and not the -link. -.TP -.BI -newer " FILE" -Opposite of -.BR -older . -.TP -.BI -name " GLOB" -Only consider files that match the shell filename pattern -.IR GLOB . -The check is only done on a file's name (use -.B -path -to check the whole path, and use -.B -dname -to check directory names). - -Multiple specifications can be given by separating them with spaces, a'la -.nf - -name '*.c *.h' -.fi -to consider C source and header files. -If -.I GLOB -doesn't contain any special pattern characters, a '*' is prepended. -This last example could have been given as -.nf - -name '.c .h' -.fi -It could also be given as -.nf - -name .c -name .h -.fi -or -.nf - -name '*.c' -name '*.h' -.fi -or -.nf - -name '*.[ch]' -.fi -(among others) -but in this last case, you have to be sure to supply the leading '*'. -.TP -.BI -path " GLOB" -Like -.B -name -except the entire path is checked against the pattern. -.TP -.B -regex " REGEX" -Considers files whose names (not paths) match the given perl regex -exactly. -.TP -.BI -iname " GLOB" -Case-insensitive version of -.BR -name . -.TP -.BI -ipath " GLOB" -Case-insensitive version of -.BR -path . -.TP -.BI -iregex " REGEX" -Case-insensitive version of -.BR -regex . - -.TP -.BI -dpath " GLOB" -Only search down directories whose path matches the given pattern (this -doesn't apply to the initial directory given by -.BI -dir , -of course). -Something like -.nf - -dir /usr/man -dpath /usr/man/man* -.fi -would completely skip -"/usr/man/cat1", "/usr/man/cat2", etc. -.TP -.BI -dskip " GLOB" -Skips directories whose name (not path) matches the given pattern. -Something like -.nf - -dir /usr/man -dskip cat* -.fi -would completely skip any directory in the tree whose name begins with "cat" -(including "/usr/man/cat1", "/usr/man/cat2", etc.). -.TP -.BI -dregex " REGEX" -Like -.BI -dpath , -but the pattern is a full perl regex. Note that this quite different -from -.B -regex -which considers only file names (not paths). This option considers -full directory paths (not just names). It's much more useful this way. -Sorry if it's confusing. -.TP -.BI -dpath " GLOB" -This option exists, but is probably not very useful. It probably wants to -be like the '-below' or something I mention in the "TODO" section. -.TP -.BI -idpath " GLOB" -Case-insensitive version of -.BR -dpath . -.TP -.BI -idskip " GLOB" -Case-insensitive version of -.BR -dskip . -.TP -.BI -idregex " REGEX" -Case-insensitive version of -.BR -dregex . -.TP -.B -all -Ignore any 'magic' or 'option' lines in the startup file. -The effect is that all files that would otherwise be automatically -excluded are considered. -.TP -.BI -x SPECIAL -Arguments starting with -.B -x -(except -.BR -xdev , -explained elsewhere) do special interaction with the -.I ~/.search -startup file. Something like -.nf - -xflag1 -xflag2 -.fi -will turn on "flag1" and "flag2" in the startup file (and is -the same as "-xflag1,flag2"). You can use this to write your own -rules for what kinds of files are to be considered. - -For example, the internal-default startup file contains the line -.nf - <!~> option: -skip '~ #' -.fi -This means that if the -.B -x~ -flag is -.I not -seen, the option -.nf - -skip '~ #' -.fi -should be done. -The effect is that emacs temp and backup files are not normally -considered, but you can included them with the -x~ flag. - -You can write your own rules to customize -.I search -in powerful ways. See the STARTUP FILE section below. -.TP -.B -why -Print a message (to stderr) when and why a file is not considered. - -.SH "OPTIONS TELLING WHAT TO DO WITH FILES THAT WILL BE CONSIDERED" -.TP -.B -find -(you can use -.B -f -as well). -This option changes the basic action of -.IR search . - -Normally, if a file is considered, it is searched -for the regular expressions as described earlier. However, if this option -is given, the filename is printed and no searching takes place. This turns -.I search -into a 'find' of some sorts. - -In this case, no regular expressions are needed on the command line -(any that are there are silently ignored). - -This is not intended to be a replacement for the 'find' program, -but to aid -you in understanding just what files are getting past the exclusion checks. -If you really want to use it as a sort of replacement for the 'find' program, -you might want to use -.B -all -so that it doesn't waste time checking to see if the file is binary, etc -(unless you really want that, of course). - -If you use -.BR -find , -none of the "GREP-LIKE OPTIONS" (below) matter. - -As a replacement for 'find', -.I search -is probably a bit slower (or in the case of GNU find, a lot slower -- -GNU find is -.I unbelievably -fast). -However, "search -ffind" -might be more useful than 'find' when options such as -.B -skip -are used (at least until 'find' gets such functionality). -.TP -.B -ffind -(or -.BR -ff ) -A faster more 'find'-like find. Does -.nf - -find -all -dorep -.fi -.SH "GREP-LIKE OPTIONS" -These options control how a searched file is accessed, -and how things are printed. -.TP -.B -i -Ignore letter case when matching. -.TP -.B -w -Consider only whole-word matches ("whole word" as defined by perl's "\\b" -regex). -.TP -.B -u -If the regex(es) is/are simple, try to modify them so that they'll work -in manpage-like underlined text (i.e. like _^Ht_^Hh_^Hi_^Hs). -This is very rudimentary at the moment. -.TP -.B -list -(you can use -.B -l -too). -Don't print matching lines, but the names of files that contain matching -lines. This will likely be *much* faster, as special optimizations are -made -- particularly with large files. -.TP -.B -n -Pepfix each line by its line number. -.TP -.B -nice -Not a grep-like option, but similar to -.BR -list , -so included here. -.B -nice -will have the output be a bit more human-readable, with matching lines printed -slightly indented after the filename, a'la -.nf - - % search foo - somedir/somefile: line with foo in it - somedir/somefile: some food for thought - anotherdir/x: don't be a buffoon! - % - -.fi -will become -.nf - - % search -nice foo - somedir/somefile: - line with foo in it - some food for thought - anotherdir/x: - don't be a buffoon! - % - -.fi -This option due to Lionel Cons. -.TP -.B -nnice -Be a bit nicer than -.BR -nice . -Prefix each file's output by a rule line, and follow with an extra blank line. -.TP -.B -h -Don't prepend each output line with the name of the file -(meaningless when -.B -find -or -.B -l -are given). - -.SH "OTHER OPTIONS" -.TP -.B -help -Print the usage information. -.TP -.B -version -Print the version information and quit. -.TP -.B -v -Set the level of message verbosity. -.B -v -will print a note whenever a new directory is entered. -.B -vv -will also print a note "every so often". This can be useful to see -what's happening when searching huge directories. -.B -vvv -will print a new with every file. -.B -vvvv -is --vvv -plus -.BR -why . -.TP -.B -e -This ends the options, and can be useful if the regex begins with '-'. -.TP -.B -showrc -Shows what is being considered in the startup file, then exits. -.TP -.B -dorep -Normally, an identical file won't be checked twice (even with multiple -hard or symbolic links). If you're just trying to do a fast -.BR -find , -the bookkeeping to remember which files have been seen is not desirable, -so you can eliminate the bookkeeping with this flag. - -.SH "STARTUP FILE" -When -.I search -starts up, it processes the directives in -.IR ~/.search . -If no such file exists, a default -internal version is used. - -The internal version looks like: -.nf - - magic: 32 : $H =~ m/[\ex00-\ex06\ex10-\ex1a\ex1c-\ex1f\ex80\exff]{2}/ - option: -skip '.a .COM .elc .EXE .gz .o .pbm .xbm .dvi' - option: -iskip '.tarz .zip .z .lzh .jpg .jpeg .gif .uu' - <!~> option: -skip '~ #' - -.fi -If you wish to create your own "~/.search", -you might consider copying the above, and then working from there. - -There are two kinds of directives in a startup file: "magic" and "option". -.RS 0n -.TP -OPTION -Option lines will automatically do the command-line options given. -For example, the line -.nf - option: -v -.fi -in you startup file will turn on -v every time, without needing to type it -on the command line. - -The text on the line after the "option:" directive is processed -like the Bourne shell, so make sure to pay attention to quoting. -.nf - option: -skip .exe .com -.fi -will give an error (".com" by itself isn't a valid option), while -.nf - option: -skip ".exe .com" -.fi -will properly include it as part of -skip's argument. - -.TP -MAGIC -Magic lines are used to determine if a file should be considered a binary -or not (the term "magic" refers to checking a file's magic number). These -are described in more detail below. -.RE - -Blank lines and comments (lines beginning with '#') are allowed. - -If a line begins with <...>, then it's a check to see if the -directive on the line should be done or not. The stuff inside the <...> -can contain perl's && (and), || (or), ! (not), and parens for grouping, -along with "flags" that might be indicated by the user with -.BI -x flag -options. - -For example, using "-xfoo" will cause "foo" to be true inside the <...> -blocks. Therefore, a line beginning with "<foo>" would be done only when -"-xfoo" had been specified, while a line beginning with "<!foo>" would be -done only when "-xfoo" is not specified (of course, a line without any <...> -is done in either case). - -A realistic example might be -.nf - <!v> -vv -.fi -This will cause -vv messages to be the default, but allow "-xv" to override. - -There are a few flags that are set automatically: -.RS -.TP -.B TTY -true if the output is to the screen (as opposed to being redirected to a file). -You can force this (as with all the other automatic flags) with -xTTY. -.TP -.B -v -True if -v was specified. If -vv was specified, both -.B -v -and -.B -vv -flags are true (and so on). -.TP -.B -nice -True if -nice was specified. Same thing about -nnice as for -vv. -.PP -.TP -.B -list -true if -list (or -l) was given. -.TP -.B -dir -true if -dir was given. -.RE - -Using this info, you might change the last example to -.nf - - <!v && !-v> option: -vv - -.fi -The added "&& !-v" means "and if the '-v' option not given". -This will allow you to use "-v" alone on the command line, and not -have this directive add the more verbose "-vv" automatically. - -.RS 0 -Some other examples: -.TP -<!-dir && !here> option: -dir ~/ -Effectively make the default directory your home directory (instead of the -current directory). Using -dir or -xhere will undo this. -.TP -<tex> option: -name .tex -dir ~/pub -Create '-xtex' to search only "*.tex" files in your ~/pub directory tree. -Actually, this could be made a bit better. If you combine '-xtex' and '-dir' -on the command line, this directive will add ~/pub to the list, when you -probably want to use the -dir directory only. You could do -.nf - - <tex> option: -name .tex - <tex && !-dir> option: -dir ~/pub -.fi - -to will allow '-xtex' to work as before, but allow a command-line "-dir" -to take precedence with respect to ~/pub. -.TP -<fluff> option: -nnice -sort -i -vvv -Combine a few user-friendly options into one '-xfluff' option. -.TP -<man> option: -ddir /usr/man -v -w -When the '-xman' option is given, search "/usr/man" for whole-words -(of whatever regex or regexes are given on the command line), with -v. -.RE - -The lines in the startup file are executed from top to bottom, so something -like -.nf - - <both> option: -xflag1 -xflag2 - <flag1> option: ...whatever... - <flag2> option: ...whatever... - -.fi -will allow '-xboth' to be the same as '-xflag1 -xflag2' (or '-xflag1,flag2' -for that matter). However, if you put the "<both>" line below the others, -they will not be true when encountered, so the result would be different -(and probably undesired). - -The "magic" directives are used to determine if a file looks to be binary -or not. The form of a magic line is -.nf - magic: \fISIZE\fP : \fIPERLCODE\fP -.fi -where -.I SIZE -is the number of bytes of the file you need to check, and -.I PERLCODE -is the code to do the check. Within -.IR PERLCODE , -the variable $H will hold at least the first -.I SIZE -bytes of the file (unless the file is shorter than that, of course). -It might hold more bytes. The perl should evaluate to true if the file -should be considered a binary. - -An example might be -.nf - magic: 6 : substr($H, 0, 6) eq 'GIF87a' -.fi -to test for a GIF ("-iskip .gif" is better, but this might be useful -if you have images in files without the ".gif" extension). - -Since the startup file is checked from top to bottom, you can be a bit -efficient: -.nf - magic: 6 : ($x6 = substr($H, 0, 6)) eq 'GIF87a' - magic: 6 : $x6 eq 'GIF89a' -.fi -You could also write the same thing as -.nf - magic: 6 : (($x6 = substr($H, 0, 6)) eq 'GIF87a') || ## an old gif, or.. \e - $x6 eq 'GIF89a' ## .. a new one. -.fi -since newlines may be escaped. - -The default internal startup file includes -.nf - magic: 32 : $H =~ m/[\ex00-\ex06\ex10-\ex1a\ex1c-\ex1f\ex80\exff]{2}/ -.fi -which checks for certain non-printable characters, and catches a large -number of binary files, including most system's executables, linkable -objects, compressed, tarred, and otherwise folded, spindled, and mutilated -files. - -Another example might be -.nf - ## an archive library - magic: 17 : substr($H, 0, 17) eq "!<arch>\en__.SYMDEF" -.fi - -.SH "RETURN VALUE" -.I Search -returns zero if lines (or files, if appropriate) were found, -or if no work was requested (such as with -.BR -help ). -Returns 1 if no lines (or files) were found. -Returns 2 on error. - -.SH TODO -Things I'd like to add some day: -.nf - + show surrounding lines (context). - + highlight matched portions of lines. - + add '-and', which can go between regexes to override - the default logical or of the regexes. - + add something like - -below GLOB - which will examine a tree and only consider files that - lie in a directory deeper than one named by the pattern. - + add 'warning' and 'error' directives. - + add 'help' directive. -.fi -.SH BUGS -If -xdev and multiple -dir arguments are given, any file in any of the -target filesystems are allowed. It would be better to allow each filesystem -for each separate tree. - -Multiple -dir args might also cause some confusing effects. Doing -.nf - -dir some/dir -dir other -.fi -will search "some/dir" completely, then search "other" completely. This -is good. However, something like -.nf - -dir some/dir -dir some/dir/more/specific -.fi -will search "some/dir" completely *except for* "some/dir/more/specific", -after which it will return and be searched. Not really a bug, but just sort -of odd. - -File times (for -newer, etc.) of symbolic links are for the file, not the -link. This could cause some misunderstandings. - -Probably more. Please let me know. -.SH AUTHOR -Jeffrey Friedl, Omron Corp (jfriedl@omron.co.jp) -.br -http://www.wg.omron.co.jp/cgi-bin/j-e/jfriedl.html - -.SH "LATEST SOURCE" -See http://www.wg.omron.co.jp/~jfriedl/perl/index.html diff --git a/wince/cecopy-lib.pl b/wince/cecopy-lib.pl deleted file mode 100644 index f1cff4dbc9..0000000000 --- a/wince/cecopy-lib.pl +++ /dev/null @@ -1,208 +0,0 @@ -# just copy modules -# TODO: copy tests and try to run them... -# this file may be used as example on how to use comp.pl - -my @files; - -my %dirs; -sub mk { - my $r = shift; - return if exists $dirs{$r}; - if ($r=~/\//) { - $r=~/^(.*)\/[^\/]*?$/; - mk($1); - } - print STDERR "..\\miniperl.exe -MCross comp.pl --do cemkdir [p]\\lib\\$r\n"; - system("..\\miniperl.exe -I..\\lib -MCross comp.pl --do cemkdir [p]\\lib\\$r"); - $dirs{$r}++; -} -for (@files) { - if (/\//) { - /^(.*)\/[^\/]*?$/; - mk($1); - } - # currently no stripping POD - system("..\\miniperl.exe -I..\\lib -MCross comp.pl --copy pc:..\\lib\\$_ ce:[p]\\lib\\$_"); -} - -sub BEGIN { - @files = qw( - attributes.pm - AutoLoader.pm - AutoSplit.pm - autouse.pm - base.pm - Benchmark.pm - bigint.pm - bignum.pm - bigrat.pm - blib.pm - bytes.pm - Carp.pm - charnames.pm - Config.pm - constant.pm - Cwd.pm - DB.pm - diagnostics.pm - Digest.pm - DirHandle.pm - Dumpvalue.pm - DynaLoader.pm - English.pm - Env.pm - Exporter.pm - Fatal.pm - fields.pm - FileCache.pm - FileHandle.pm - filetest.pm - FindBin.pm - if.pm - integer.pm - less.pm - locale.pm - Memoize.pm - NEXT.pm - open.pm - overload.pm - PerlIO.pm - re.pm - SelectSaver.pm - SelfLoader.pm - Shell.pm - sigtrap.pm - sort.pm - strict.pm - subs.pm - Switch.pm - Symbol.pm - Test.pm - Thread.pm - UNIVERSAL.pm - utf8.pm - vars.pm - vmsish.pm - warnings.pm - XSLoader.pm - warnings/register.pm - Unicode/Collate.pm - Unicode/UCD.pm - Time/gmtime.pm - Time/Local.pm - Time/localtime.pm - Time/tm.pm - Tie/Array.pm - Tie/File.pm - Tie/Handle.pm - Tie/Hash.pm - Tie/Memoize.pm - Tie/RefHash.pm - Tie/Scalar.pm - Tie/SubstrHash.pm - Text/Abbrev.pm - Text/Balanced.pm - Text/ParseWords.pm - Text/Soundex.pm - Text/Tabs.pm - Text/Wrap.pm - Test/Builder.pm - Test/Harness.pm - Test/More.pm - Test/Simple.pm - Test/Harness/Assert.pm - Test/Harness/Iterator.pm - Test/Harness/Straps.pm - Term/ANSIColor.pm - Term/Cap.pm - Term/Complete.pm - Term/ReadLine.pm - Search/Dict.pm - Pod/Checker.pm - Pod/Find.pm - Pod/Functions.pm - Pod/Html.pm - Pod/InputObjects.pm - Pod/LaTeX.pm - Pod/Man.pm - Pod/ParseLink.pm - Pod/Parser.pm - Pod/ParseUtils.pm - Pod/Plainer.pm - Pod/Select.pm - Pod/Text.pm - Pod/Usage.pm - Pod/Text/Color.pm - Pod/Text/Overstrike.pm - Pod/Text/Termcap.pm - Math/BigFloat.pm - Math/BigInt.pm - Math/BigRat.pm - Math/Complex.pm - Math/Trig.pm - Math/BigInt/Calc.pm - Math/BigInt/Trace.pm - Math/BigFloat/Trace.pm - Locale/Constants.pm - Locale/Country.pm - Locale/Currency.pm - Locale/Language.pm - Locale/Maketext.pm - Locale/Script.pm - IPC/Open2.pm - IPC/Open3.pm - I18N/Collate.pm - I18N/LangTags.pm - I18N/LangTags/List.pm - Hash/Util.pm - Getopt/Long.pm - Getopt/Std.pm - Filter/Simple.pm - File/Basename.pm - File/CheckTree.pm - File/Compare.pm - File/Copy.pm - File/DosGlob.pm - File/Find.pm - File/Path.pm - File/Spec.pm - File/stat.pm - File/Temp.pm - File/Spec/Functions.pm - File/Spec/Mac.pm - File/Spec/Unix.pm - File/Spec/Win32.pm - ExtUtils/Command.pm - ExtUtils/Constant.pm - ExtUtils/Embed.pm - ExtUtils/Install.pm - ExtUtils/Installed.pm - ExtUtils/Liblist.pm - ExtUtils/MakeMaker.pm - ExtUtils/Manifest.pm - ExtUtils/Miniperl.pm - ExtUtils/Mkbootstrap.pm - ExtUtils/Mksymlists.pm - ExtUtils/MM.pm - ExtUtils/MM_Any.pm - ExtUtils/MM_DOS.pm - ExtUtils/MM_Unix.pm - ExtUtils/MM_UWIN.pm - ExtUtils/MM_Win32.pm - ExtUtils/MM_Win95.pm - ExtUtils/MY.pm - ExtUtils/Packlist.pm - ExtUtils/testlib.pm - ExtUtils/Liblist/Kid.pm - ExtUtils/Command/MM.pm - Exporter/Heavy.pm - Devel/SelfStubber.pm - Class/ISA.pm - Class/Struct.pm - Carp/Heavy.pm - Attribute/Handlers.pm - Attribute/Handlers/demo/Demo.pm - Attribute/Handlers/demo/Descriptions.pm - Attribute/Handlers/demo/MyClass.pm - ); -} diff --git a/wince/comp.pl b/wince/comp.pl deleted file mode 100644 index 3fab27ccce..0000000000 --- a/wince/comp.pl +++ /dev/null @@ -1,84 +0,0 @@ -=comments - -helper script to make life for PerlCE easier. - -There are different modes for running this script: - perl comp.pl --run [any-command-line-arguments] -and - perl comp.pl --do [any-command-line-arguments] -and - perl comp.pl --copy pc:[pc-location] ce:[ce-location] - ---run executes this build of perl on CE device with arguments provided ---run=test will display a predefined messagebox that say everything is ok. - ---do Executes on local computer command that is presented by arguments - immediately following after --do - Most reason why you may want to execute script in this mode is that - arguments preprocessed to replace [p] occurrences into current perl - location. Typically it is handy to run - perl comp.pl --do cecopy pc:..\lib\Exporter.pm ce:[p]\lib - ---copy copies file to CE device - here also [p] will be expanded to current PerlCE path, and additionally - when --copy=compact specified then, if filename looks like perl module, - then POD will be stripped away from that file - modules - - -=cut - -use strict; -use Cross; -use Config; - -# edit value of $inst_root variable to reflect your desired location of -# built perl -my $inst_root = $Config{prefix}; - -my %opts = ( - # %known_opts enumerates allowed opts as well as specifies default and initial values - my %known_opts = ( - 'do' => '', - 'run' => '', - 'copy' => '', - ), - #options itself - my %specified_opts = ( - (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth - (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt - ), -); -die "option '$_' is not recognized" for grep {!exists $known_opts{$_}} keys %specified_opts; -@ARGV = grep {!/^--/} @ARGV; - -if ($opts{'do'}) { - s/\[p\]/$inst_root/g for @ARGV; - system(@ARGV); -} -elsif ($opts{'run'}) { - if ($opts{'run'} eq 'test') { - system("ceexec","$inst_root\\bin\\perl","-we","Win32::MessageBox(\$].qq(\n).join'','cc'..'dx')"); - } - else { - system("ceexec","$inst_root\\bin\\perl", map {/^".*"$/s?$_:"\"$_\""} @ARGV); - } -} -elsif ($opts{'copy'}) { - if ($opts{'copy'} eq 'compact') { - die "todo"; - } - s/\[p\]/$inst_root/g for @ARGV; - if ($ARGV[0]=~/^pc:/i) {system("cedel",$ARGV[1])} - system("cecopy",@ARGV); -} -else { - # todo -} - - -=comments - - Author Vadim Konovalov. - -=cut diff --git a/wince/compile-all.bat b/wince/compile-all.bat deleted file mode 100644 index c85f5e9b7c..0000000000 --- a/wince/compile-all.bat +++ /dev/null @@ -1,62 +0,0 @@ -@echo off
-rem
-rem Normally you do not need to run this file.
-rem Instead you should edit and execute compile.bat .
-rem
-rem This file assumes that you have a set of appropriate
-rem bat-files that prepare environment variables for build process
-rem and execute commands passed as arguments
-rem
-
-call wcearm-300 compile.bat "MACHINE=wince-arm-hpc-wce300"
-call wcearm-300 compile.bat "MACHINE=wince-arm-hpc-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call wcearm-211 compile.bat "MACHINE=wince-arm-hpc-wce211"
-call wcearm-211 compile.bat "MACHINE=wince-arm-hpc-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call wcesh3-211 compile.bat "MACHINE=wince-sh3-hpc-wce211"
-call wcesh3-211 compile.bat "MACHINE=wince-sh3-hpc-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call wcemips-211 compile.bat "MACHINE=wince-mips-hpc-wce211"
-call wcemips-211 compile.bat "MACHINE=wince-mips-hpc-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-rem TODO call wcesh3-200 compile.bat "MACHINE=wince-sh3-hpc-wce200"
-rem TODO call wcesh3-200 compile.bat "MACHINE=wince-sh3-hpc-wce200" zipdist
-rem TODO ..\miniperl makedist.pl --clean-exts
-
-rem TODO call compile.bat "MACHINE=wince-mips-hpc-wce200"
-rem TODO call compile.bat "MACHINE=wince-mips-hpc-wce200" zipdist
-rem TODO ..\miniperl makedist.pl --clean-exts
-
-call WCEARM-p300 compile.bat "MACHINE=wince-arm-pocket-wce300"
-call WCEARM-p300 compile.bat "MACHINE=wince-arm-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEMIPS-300 compile.bat "MACHINE=wince-mips-pocket-wce300"
-call WCEMIPS-300 compile.bat "MACHINE=wince-mips-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCESH3-300 compile.bat "MACHINE=wince-sh3-pocket-wce300"
-call WCESH3-300 compile.bat "MACHINE=wince-sh3-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEx86-300 compile.bat "MACHINE=wince-x86em-pocket-wce300"
-call WCEx86-300 compile.bat "MACHINE=wince-x86em-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEMIPS-palm211 compile.bat "MACHINE=wince-mips-palm-wce211"
-call WCEMIPS-palm211 compile.bat "MACHINE=wince-mips-palm-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCESH3-palm211 compile.bat "MACHINE=wince-sh3-palm-wce211"
-call WCESH3-palm211 compile.bat "MACHINE=wince-sh3-palm-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEx86-palm211 compile.bat "MACHINE=wince-x86em-palm-wce211"
-call WCEx86-palm211 compile.bat "MACHINE=wince-x86em-palm-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
diff --git a/wince/compile.bat b/wince/compile.bat deleted file mode 100644 index 79ed2fb80c..0000000000 --- a/wince/compile.bat +++ /dev/null @@ -1,42 +0,0 @@ -@echo off -rem -rem edit ARG-xxx variable to reflect your system and run -rem compile.bat [target] [additional parameters for nmake] -rem - -set ARG-1=PV= -set ARG-2=INST_VER= -set ARG-3=INSTALL_ROOT=\Storage Card\perl58m -set ARG-4=WCEROOT=%SDKROOT% -set ARG-5=CEPATH=%WCEROOT% -set ARG-6=CELIBDLLDIR=d:\personal\pocketPC\celib-palm-3.0 -set ARG-7=CECONSOLEDIR=d:\personal\pocketPC\w32console - -rem Only for WIN2000 -set ARG-8=YES=/y - -set ARG-9=CFG=RELEASE - -rem -rem uncomment one of following lines that matches your configuration - -rem set ARG-10=MACHINE=wince-mips-pocket-wce300 -rem set ARG-10=MACHINE=wince-arm-hpc-wce300 -rem set ARG-10=MACHINE=wince-arm-hpc-wce211 -rem set ARG-10=MACHINE=wince-sh3-hpc-wce211 -rem set ARG-10=MACHINE=wince-mips-hpc-wce211 -rem set ARG-10=MACHINE=wince-sh3-hpc-wce200 -rem set ARG-10=MACHINE=wince-mips-hpc-wce200 -rem set ARG-10=MACHINE=wince-arm-pocket-wce300 -rem set ARG-10=MACHINE=wince-mips-pocket-wce300 -rem set ARG-10=MACHINE=wince-sh3-pocket-wce300 -rem set ARG-10=MACHINE=wince-x86em-pocket-wce300 -rem set ARG-10=MACHINE=wince-mips-palm-wce211 -rem set ARG-10=MACHINE=wince-sh3-palm-wce211 -rem set ARG-10=MACHINE=wince-x86em-palm-wce211 - -set ARG-11=PERLCEDIR=$(MAKEDIR) -set ARG-12=MSVCDIR=D:\MSVStudio\VC98 -set ARG-13=CECOPY=$(HPERL) -I$(PERLCEDIR)\lib $(PERLCEDIR)\comp.pl --copy - -nmake -f Makefile.ce "%ARG-1%" "%ARG-2%" "%ARG-3%" "%ARG-4%" "%ARG-5%" "%ARG-6%" "%ARG-7%" "%ARG-8%" "%ARG-9%" "%ARG-10%" "%ARG-11%" "%ARG-12%" "%ARG-13%" %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/wince/config.ce b/wince/config.ce deleted file mode 100644 index f189a9683a..0000000000 --- a/wince/config.ce +++ /dev/null @@ -1,981 +0,0 @@ -## Configured by: ~cf_email~ -## Target system: WINCE -Author='' -PERL_CONFIG_SH='true' -CONFIGDOTSH='true' -Date='$Date' -Header='' -Id='$Id' -Locker='' -Log='$Log' -Mcc='Mcc' -RCSfile='$RCSfile' -Revision='$Revision' -Source='' -State='' -# keep this for WinCE, as it is used by some mods... -_a='.lib' -_exe='.exe' -_o='.obj' -afs='false' -alignbytes='8' -ansi2knr='' -aphostname='' -api_revision='~PERL_API_REVISION~' -api_subversion='~PERL_API_SUBVERSION~' -api_version='~PERL_API_VERSION~' -api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~' -ar='lib' -archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~' -archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~' -archname64='' -archname='wince' -archobjs='' -asctime_r_proto='0' -awk='awk' -baserev='5' -bash='' -bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -bison='' -byacc='byacc' -byteorder='1234' -c='' -castflags='0' -cat='type' -cc='~CC~' -cccdlflags=' ' -ccdlflags=' ' -ccflags='-DWIN32' -ccsymbols='' -cf_by='nobody' -cf_email='nobody@no.where.net' -cf_time='' -charsize='1' -chgrp='' -chmod='' -chown='' -clocktype='clock_t' -comm='' -compress='' -contains='grep' -cp='copy' -cpio='' -cpp='~CC~ -nologo -E' -cpp_stuff='42' -cppccsymbols='' -cppflags='-DWIN32' -cpplast='' -cppminus='' -cpprun='~CC~ -nologo -E' -cppstdin='~CC~ -nologo -E' -cppsymbols='' -crosscompile='undef' -crypt_r_proto='0' -cryptlib='' -csh='undef' -ctermid_r_proto='0' -ctime_r_proto='0' -d_Gconvert='sprintf((b),"%.*g",(n),(x))' -d_PRIEldbl='undef' -d_PRIFldbl='undef' -d_PRIGldbl='undef' -d_PRIX64='undef' -d_PRId64='undef' -d_PRIeldbl='undef' -d_PRIfldbl='undef' -d_PRIgldbl='undef' -d_PRIi64='undef' -d_PRIo64='undef' -d_PRIu64='undef' -d_PRIx64='undef' -d_SCNfldbl='undef' -d__fwalk='undef' -d_access='define' -d_accessx='undef' -d_aintl='undef' -d_alarm='undef' -d_archlib='define' -d_asctime_r='undef' -d_atolf='undef' -d_atoll='undef' -d_attribute_format='undef' -d_attribute_malloc='undef' -d_attribute_nonnull='undef' -d_attribute_noreturn='undef' -d_attribute_pure='undef' -d_attribute_unused='undef' -d_attribute_warn_unused_result='undef' -d_bcmp='undef' -d_bcopy='undef' -d_bsd='define' -d_bsdgetpgrp='undef' -d_bsdsetpgrp='undef' -d_bzero='undef' -d_casti32='undef' -d_castneg='define' -d_charvspr='undef' -d_chown='undef' -d_chroot='undef' -d_chsize='define' -d_class='undef' -d_clearenv='undef' -d_closedir='define' -d_cmsghdr_s='undef' -d_const='define' -d_copysignl='undef' -d_crypt='undef' -d_crypt_r='undef' -d_csh='undef' -d_ctermid_r='undef' -d_ctime_r='undef' -d_cuserid='undef' -d_dbl_dig='define' -d_dbminitproto='undef' -d_difftime='define' -d_dirfd='undef' -d_dirnamlen='define' -d_dlerror='define' -d_dlopen='define' -d_dlsymun='undef' -d_dosuid='undef' -d_drand48_r='undef' -d_drand48proto='undef' -d_dup2='define' -d_eaccess='undef' -d_endgrent='undef' -d_endgrent_r='undef' -d_endhent='undef' -d_endhostent_r='undef' -d_endnent='undef' -d_endnetent_r='undef' -d_endpent='undef' -d_endprotoent_r='undef' -d_endpwent='undef' -d_endpwent_r='undef' -d_endsent='undef' -d_endservent_r='undef' -d_endspent='undef' -d_eofnblk='define' -d_eunice='undef' -d_faststdio='undef' -d_fchdir='undef' -d_fchmod='undef' -d_fchown='undef' -d_fcntl='undef' -d_fcntl_can_lock='undef' -d_fd_macros='define' -d_fd_set='define' -d_fds_bits='define' -d_fgetpos='define' -d_finite='undef' -d_finitel='undef' -d_flexfnam='define' -d_flock='undef' -d_flockproto='undef' -d_fork='undef' -d_fp_class='undef' -d_fpathconf='undef' -d_fpclass='undef' -d_fpclassify='undef' -d_fpclassl='undef' -d_fpos64_t='undef' -d_frexpl='undef' -d_fs_data_s='undef' -d_fseeko='undef' -d_fsetpos='define' -d_fstatfs='undef' -d_fstatvfs='undef' -d_fsync='undef' -d_ftello='undef' -d_ftime='define' -d_futimes='undef' -d_getcwd='define' -d_getespwnam='undef' -d_getfsstat='undef' -d_getgrent='undef' -d_getgrent_r='undef' -d_getgrgid_r='undef' -d_getgrnam_r='undef' -d_getgrps='undef' -d_gethbyaddr='define' -d_gethbyname='define' -d_gethent='undef' -d_gethname='define' -d_gethostbyaddr_r='undef' -d_gethostbyname_r='undef' -d_gethostent_r='undef' -d_gethostprotos='define' -d_getitimer='undef' -d_getlogin='define' -d_getlogin_r='undef' -d_getmnt='undef' -d_getmntent='undef' -d_getnbyaddr='undef' -d_getnbyname='undef' -d_getnent='undef' -d_getnetbyaddr_r='undef' -d_getnetbyname_r='undef' -d_getnetent_r='undef' -d_getnetprotos='undef' -d_getpagsz='undef' -d_getpbyname='define' -d_getpbynumber='define' -d_getpent='undef' -d_getpgid='undef' -d_getpgrp2='undef' -d_getpgrp='undef' -d_getppid='undef' -d_getprior='undef' -d_getprotobyname_r='undef' -d_getprotobynumber_r='undef' -d_getprotoent_r='undef' -d_getprotoprotos='define' -d_getprpwnam='undef' -d_getpwent='undef' -d_getpwent_r='undef' -d_getpwnam_r='undef' -d_getpwuid_r='undef' -d_getsbyname='define' -d_getsbyport='define' -d_getsent='undef' -d_getservbyname_r='undef' -d_getservbyport_r='undef' -d_getservent_r='undef' -d_getservprotos='define' -d_getspent='undef' -d_getspnam='undef' -d_getspnam_r='undef' -d_gettimeod='undef' -d_gmtime_r='undef' -d_gnulibc='undef' -d_grpasswd='undef' -d_hasmntopt='undef' -d_htonl='define' -d_ilogbl='undef' -d_inc_version_list='undef' -d_index='undef' -d_inetaton='undef' -d_int64_t='undef' -d_isascii='define' -d_isfinite='undef' -d_isinf='undef' -d_isnan='define' -d_isnanl='undef' -d_killpg='undef' -d_lchown='undef' -d_ldbl_dig='define' -d_libm_lib_version='undef' -d_link='define' -d_localtime_r='undef' -d_locconv='define' -d_lockf='undef' -d_longdbl='undef' -d_longlong='undef' -d_lseekproto='define' -d_lstat='undef' -d_madvise='undef' -d_malloc_good_size='undef' -d_malloc_size='undef' -d_mblen='define' -d_mbstowcs='define' -d_mbtowc='define' -d_memchr='define' -d_memcmp='define' -d_memcpy='define' -d_memmove='define' -d_memset='define' -d_mkdir='define' -d_mkdtemp='undef' -d_mkfifo='undef' -d_mkstemp='undef' -d_mkstemps='undef' -d_mktime='define' -d_mmap='undef' -d_modfl='undef' -d_modfl_pow32_bug='undef' -d_modflproto='undef' -d_mprotect='undef' -d_msg='undef' -d_msg_ctrunc='undef' -d_msg_dontroute='undef' -d_msg_oob='undef' -d_msg_peek='undef' -d_msg_proxy='undef' -d_msgctl='undef' -d_msgget='undef' -d_msghdr_s='undef' -d_msgrcv='undef' -d_msgsnd='undef' -d_msync='undef' -d_munmap='undef' -d_mymalloc='~PERL_MALLOC~' -d_nice='undef' -d_nl_langinfo='undef' -d_nv_preserves_uv='define' -d_nv_zero_is_allbits_zero='undef' -d_off64_t='undef' -d_old_pthread_create_joinable='undef' -d_oldpthreads='undef' -d_oldsock='undef' -d_open3='undef' -d_pathconf='undef' -d_pause='define' -d_perl_otherlibdirs='undef' -d_phostname='undef' -d_pipe='undef' -d_poll='undef' -d_portable='define' -d_procselfexe='undef' -d_pthread_atfork='undef' -d_pthread_attr_setscope='undef' -d_pthread_yield='undef' -d_pwage='undef' -d_pwchange='undef' -d_pwclass='undef' -d_pwcomment='undef' -d_pwexpire='undef' -d_pwgecos='undef' -d_pwpasswd='undef' -d_pwquota='undef' -d_qgcvt='undef' -d_quad='undef' -d_random_r='undef' -d_readdir64_r='undef' -d_readdir='define' -d_readdir_r='undef' -d_readlink='undef' -d_readv='undef' -d_recvmsg='undef' -d_rename='define' -d_rewinddir='define' -d_rmdir='define' -d_safebcpy='undef' -d_safemcpy='undef' -d_sanemcmp='define' -d_sbrkproto='undef' -d_scalbnl='undef' -d_sched_yield='undef' -d_scm_rights='undef' -d_seekdir='define' -d_select='define' -d_sem='undef' -d_semctl='undef' -d_semctl_semid_ds='undef' -d_semctl_semun='undef' -d_semget='undef' -d_semop='undef' -d_sendmsg='undef' -d_setegid='undef' -d_seteuid='undef' -d_setgrent='undef' -d_setgrent_r='undef' -d_setgrps='undef' -d_sethent='undef' -d_sethostent_r='undef' -d_setitimer='undef' -d_setlinebuf='undef' -d_setlocale='define' -d_setlocale_r='undef' -d_setnent='undef' -d_setnetent_r='undef' -d_setpent='undef' -d_setpgid='undef' -d_setpgrp2='undef' -d_setpgrp='undef' -d_setprior='undef' -d_setproctitle='undef' -d_setprotoent_r='undef' -d_setpwent='undef' -d_setpwent_r='undef' -d_setregid='undef' -d_setresgid='undef' -d_setresuid='undef' -d_setreuid='undef' -d_setrgid='undef' -d_setruid='undef' -d_setsent='undef' -d_setservent_r='undef' -d_setsid='undef' -d_setspent='undef' -d_setvbuf='undef' -d_sfio='undef' -d_shm='undef' -d_shmat='undef' -d_shmatprototype='undef' -d_shmctl='undef' -d_shmdt='undef' -d_shmget='undef' -d_sigaction='undef' -d_sigprocmask='undef' -d_sigsetjmp='undef' -d_sitearch='define' -d_snprintf='undef' -d_sockatmark='undef' -d_sockatmarkproto='undef' -d_socket='define' -d_socklen_t='undef' -d_sockpair='undef' -d_socks5_init='undef' -d_sprintf_returns_strlen='define' -d_sqrtl='undef' -d_srand48_r='undef' -d_srandom_r='undef' -d_sresgproto='undef' -d_sresuproto='undef' -d_statblks='undef' -d_statfs_f_flags='undef' -d_statfs_s='undef' -d_statvfs='undef' -d_stdio_cnt_lval='undef' -d_stdio_ptr_lval='undef' -d_stdio_ptr_lval_nochange_cnt='undef' -d_stdio_ptr_lval_sets_cnt='undef' -d_stdio_stream_array='undef' -d_stdiobase='undef' -d_stdstdio='undef' -d_strchr='define' -d_strcoll='define' -d_strctcpy='define' -d_strerrm='strerror(e)' -d_strerror='define' -d_strerror_r='undef' -d_strftime='undef' -d_strlcat='undef' -d_strlcpy='undef' -d_strtod='define' -d_strtol='define' -d_strtold='undef' -d_strtoll='undef' -d_strtoq='undef' -d_strtoul='define' -d_strtoull='undef' -d_strtouq='undef' -d_strxfrm='undef' -d_suidsafe='undef' -d_symlink='undef' -d_syscall='undef' -d_syscallproto='undef' -d_sysconf='undef' -d_sysernlst='' -d_syserrlst='define' -d_system='define' -d_tcgetpgrp='undef' -d_tcsetpgrp='undef' -d_telldir='define' -d_telldirproto='define' -d_time='define' -d_times='define' -d_tm_tm_gmtoff='undef' -d_tm_tm_zone='undef' -d_tmpnam_r='undef' -d_truncate='undef' -d_ttyname_r='undef' -d_tzname='define' -d_u32align='undef' -d_ualarm='undef' -d_umask='define' -d_uname='define' -d_union_semun='define' -d_unordered='undef' -d_unsetenv='undef' -d_usleep='undef' -d_usleepproto='undef' -d_ustat='undef' -d_vendorarch='undef' -d_vendorbin='undef' -d_vendorlib='undef' -d_vfork='undef' -d_void_closedir='undef' -d_voidsig='define' -d_voidtty='' -d_volatile='define' -d_vprintf='define' -d_vsnprintf='undef' -d_wait4='undef' -d_waitpid='define' -d_wcstombs='define' -d_wctomb='define' -d_writev='undef' -d_xenix='undef' -date='date' -db_hashtype='int' -db_prefixtype='int' -defvoidused='15' -direntrytype='struct direct' -dlext='dll' -dlsrc='dl_win32.xs' -doublesize='8' -drand01='(rand()/(double)((unsigned)1<<RANDBITS))' -drand48_r_proto='0' -dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' -eagain='EAGAIN' -ebcdic='undef' -echo='echo' -egrep='egrep' -emacs='' -endgrent_r_proto='0' -endhostent_r_proto='0' -endnetent_r_proto='0' -endprotoent_r_proto='0' -endpwent_r_proto='0' -endservent_r_proto='0' -eunicefix=':' -exe_ext='.exe' -expr='expr' -extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~' -fflushNULL='define' -fflushall='undef' -find='find' -firstmakefile='makefile' -flex='' -fpossize='4' -fpostype='fpos_t' -freetype='void' -full_ar='' -full_csh='' -full_sed='' -gccversion='' -getgrent_r_proto='0' -getgrgid_r_proto='0' -getgrnam_r_proto='0' -gethostbyaddr_r_proto='0' -gethostbyname_r_proto='0' -gethostent_r_proto='0' -getlogin_r_proto='0' -getnetbyaddr_r_proto='0' -getnetbyname_r_proto='0' -getnetent_r_proto='0' -getprotobyname_r_proto='0' -getprotobynumber_r_proto='0' -getprotoent_r_proto='0' -getpwent_r_proto='0' -getpwnam_r_proto='0' -getpwuid_r_proto='0' -getservbyname_r_proto='0' -getservbyport_r_proto='0' -getservent_r_proto='0' -getspnam_r_proto='0' -gidformat='"ld"' -gidsign='-1' -gidsize='4' -gidtype='gid_t' -glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib ' -gmtime_r_proto='0' -grep='grep' -groupcat='' -groupstype='gid_t' -gzip='gzip' -h_fcntl='true' -h_sysfile='true' -hint='recommended' -hostcat='ypcat hosts' -huge='' -i16size='2' -i16type='short' -i32size='4' -i32type='long' -i64size='8' -i64type='__int64' -i8size='1' -i8type='char' -i_arpainet='define' -i_bsdioctl='' -i_crypt='undef' -i_db='undef' -i_dbm='undef' -i_dirent='define' -i_dld='undef' -i_dlfcn='define' -i_fcntl='define' -i_float='define' -i_fp='undef' -i_fp_class='undef' -i_gdbm='undef' -i_grp='undef' -i_ieeefp='undef' -i_inttypes='undef' -i_langinfo='undef' -i_libutil='undef' -i_limits='define' -i_locale='undef' -i_machcthr='undef' -i_malloc='define' -i_math='define' -i_memory='undef' -i_mntent='undef' -i_ndbm='undef' -i_netdb='undef' -i_neterrno='undef' -i_netinettcp='undef' -i_niin='undef' -i_poll='undef' -i_prot='undef' -i_pthread='undef' -i_pwd='undef' -i_rpcsvcdbm='define' -i_sfio='undef' -i_sgtty='undef' -i_shadow='undef' -i_socks='undef' -i_stdarg='define' -i_stddef='define' -i_stdlib='define' -i_string='define' -i_sunmath='undef' -i_sysaccess='undef' -i_sysdir='undef' -i_sysfile='undef' -i_sysfilio='define' -i_sysin='undef' -i_sysioctl='undef' -i_syslog='undef' -i_sysmman='undef' -i_sysmode='undef' -i_sysmount='undef' -i_sysndir='undef' -i_sysparam='undef' -i_sysresrc='undef' -i_syssecrt='undef' -i_sysselct='undef' -i_syssockio='undef' -i_sysstat='define' -i_sysstatfs='undef' -i_sysstatvfs='undef' -i_systime='undef' -i_systimek='undef' -i_systimes='undef' -i_systypes='undef' -i_sysuio='undef' -i_sysun='undef' -i_sysutsname='undef' -i_sysvfs='undef' -i_syswait='undef' -i_termio='undef' -i_termios='undef' -i_time='undef' -i_unistd='undef' -i_ustat='undef' -i_utime='define' -i_values='undef' -i_varargs='undef' -i_varhdr='varargs.h' -i_vfork='undef' -ignore_versioned_solibs='' -inc_version_list='' -inc_version_list_init='0' -incpath='' -inews='' -installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~' -installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -installhtmldir='~INST_TOP~~INST_VER~\html' -installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp' -installman1dir='~INST_TOP~~INST_VER~\man\man1' -installman3dir='~INST_TOP~~INST_VER~\man\man3' -installprefix='~INST_TOP~~INST_VER~' -installprefixexp='~INST_TOP~~INST_VER~' -installprivlib='~INST_TOP~~INST_VER~\lib' -installscript='~INST_TOP~~INST_VER~\bin' -installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~' -installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -installsitelib='~INST_TOP~\site~INST_VER~\lib' -installstyle='lib' -installusrbinperl='undef' -installvendorarch='' -installvendorbin='' -installvendorlib='' -intsize='4' -ivdformat='"ld"' -ivsize='4' -ivtype='long' -known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~' -ksh='' -large='' -ld='link' -lddlflags='-dll ~LINK_FLAGS~' -ldflags='~LINK_FLAGS~' -ldlibpthname='' -less='less' -lib_ext='.lib' -libc='msvcrt.lib' -libperl='perl.lib' -libpth='' -libs='' -libsdirs='' -libsfiles='' -libsfound='' -libspath='' -libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' -line='line' -lint='' -lkflags='' -ln='' -lns='copy' -localtime_r_proto='0' -locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' -loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' -longdblsize='10' -longlongsize='8' -longsize='4' -lp='' -lpr='' -ls='dir' -lseeksize='4' -lseektype='long' -mad='undef' -mail='' -mailx='' -make='nmake' -make_set_make='#' -mallocobj='malloc.o' -mallocsrc='malloc.c' -malloctype='void *' -man1dir='~INST_TOP~~INST_VER~\man\man1' -man1direxp='~INST_TOP~~INST_VER~\man\man1' -man1ext='1' -man3dir='~INST_TOP~~INST_VER~\man\man3' -man3direxp='~INST_TOP~~INST_VER~\man\man3' -man3ext='3' -medium='' -mips_type='' -mkdir='mkdir' -mmaptype='void *' -models='none' -modetype='mode_t' -more='more /e' -multiarch='undef' -mv='' -myarchname='wince' -mydomain='' -myhostname='' -myuname='' -n='-n' -need_va_copy='undef' -netdb_hlen_type='int' -netdb_host_type='char *' -netdb_name_type='char *' -netdb_net_type='long' -nm='' -nm_opt='' -nm_so_opt='' -nonxs_ext='Errno' -nroff='' -nveformat='"e"' -nvfformat='"f"' -nvgformat='"g"' -nvsize='8' -nvtype='double' -nv_preserves_uv_bits='32' -o_nonblock='O_NONBLOCK' -obj_ext='.obj' -old_pthread_create_joinable='' -optimize='-O' -orderlib='false' -osname='MSWin32' -osvers='4.0' -otherlibdirs='' -package='perl5' -pager='more /e' -passcat='' -patchlevel='~PATCHLEVEL~' -path_sep=';' -perl5='' -perl='perl' -perladmin='' -perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe' -pg='' -phostname='hostname' -pidtype='int' -plibpth='' -pmake='' -pr='' -prefix='~INST_TOP~' -prefixexp='~INST_DRV~' -privlib='~INST_TOP~~INST_VER~\lib' -privlibexp='~INST_TOP~~INST_VER~\lib' -procselfexe='' -prototype='define' -ptrsize='4' -quadkind='5' -quadtype='__int64' -randbits='15' -randfunc='rand' -random_r_proto='0' -randseedtype='unsigned' -ranlib='rem' -rd_nodata='-1' -readdir64_r_proto='0' -readdir_r_proto='0' -revision='5' -rm='del' -rmail='' -runnm='true' -sPRIEldbl='"E"' -sPRIFldbl='"F"' -sPRIGldbl='"G"' -sPRIX64='"lX"' -sPRId64='"ld"' -sPRIeldbl='"e"' -sPRIfldbl='"f"' -sPRIgldbl='"g"' -sPRIi64='"li"' -sPRIo64='"lo"' -sPRIu64='"lu"' -sPRIx64='"lx"' -sSCNfldbl='' -sched_yield='' -scriptdir='~INST_TOP~~INST_VER~\bin' -scriptdirexp='~INST_TOP~~INST_VER~\bin' -sed='sed' -seedfunc='srand' -selectminbits='32' -selecttype='Perl_fd_set *' -sendmail='blat' -setgrent_r_proto='0' -sethostent_r_proto='0' -setlocale_r_proto='0' -setnetent_r_proto='0' -setprotoent_r_proto='0' -setpwent_r_proto='0' -setservent_r_proto='0' -sh='cmd /x /c' -shar='' -sharpbang='#!' -shmattype='void *' -shortsize='2' -shrpenv='' -shsharp='true' -sig_count='26' -sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD' -sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0' -sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20 0' -sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0' -sig_size='27' -signal_t='void' -sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~' -sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~' -sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~' -sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~' -sitelib='~INST_TOP~\site~INST_VER~\lib' -sitelib_stem='' -sitelibexp='~INST_TOP~\site~INST_VER~\lib' -siteprefix='~INST_TOP~\site~INST_VER~' -siteprefixexp='~INST_TOP~\site~INST_VER~' -sizesize='4' -sizetype='size_t' -sleep='' -smail='' -small='' -so='dll' -sockethdr='' -socketlib='' -socksizetype='int' -sort='sort' -spackage='Perl5' -spitshell='' -split='' -srand48_r_proto='0' -srandom_r_proto='0' -src='' -ssizetype='int' -startperl='#!perl' -startsh='#!/bin/sh' -static_ext='DynaLoader' -stdchar='char' -stdio_base='' -stdio_bufsiz='' -stdio_cnt='' -stdio_filbuf='' -stdio_ptr='' -stdio_stream_array='' -strerror_r_proto='0' -strings='/usr/include/string.h' -submit='' -subversion='~SUBVERSION~' -sysman='/usr/man/man1' -tail='' -tar='' -tbl='' -tee='' -test='' -timeincl='/usr/include/sys/time.h ' -timetype='time_t' -tmpnam_r_proto='0' -touch='touch' -tr='' -trnl='\012' -troff='' -ttyname_r_proto='0' -u16size='2' -u16type='unsigned short' -u32size='4' -u32type='unsigned long' -u64size='8' -u64type='unsigned __int64' -u8size='1' -u8type='unsigned char' -uidformat='"ld"' -uidsign='-1' -uidsize='4' -uidtype='uid_t' -uname='uname' -uniq='uniq' -uquadtype='unsigned __int64' -use5005threads='undef' -use64bitall='undef' -use64bitint='undef' -usecrosscompile='undef' -usedl='define' -usefaststdio='undef' -useithreads='~USE_ITHREADS~' -uselargefiles='undef' -uselongdouble='undef' -usemallocwrap='define' -usemorebits='undef' -usemultiplicity='undef' -usemymalloc='n' -usenm='false' -useopcode='true' -useperlio='~USE_PERLIO~' -useposix='true' -usereentrant='undef' -userelocatableinc='undef' -usesfio='false' -useshrplib='yes' -usesitecustomize='undef' -usesocks='undef' -usethreads='undef' -usevendorprefix='undef' -usevfork='false' -usrinc='/usr/include' -uuname='' -uvXUformat='"lX"' -uvoformat='"lo"' -uvsize='4' -uvtype='unsigned long' -uvuformat='"lu"' -uvxformat='"lx"' -vendorarch='' -vendorarchexp='' -vendorbin='' -vendorbinexp='' -vendorlib='' -vendorlib_stem='' -vendorlibexp='' -vendorprefix='' -vendorprefixexp='' -version='~VERSION~' -versiononly='undef' -vi='' -voidflags='15' -xlibpth='/usr/lib/386 /lib/386' -zcat='' -zip='zip' -PERL_REVISION='~PERL_REVISION~' -PERL_SUBVERSION='~PERL_SUBVERSION~' -PERL_VERSION='~PERL_VERSION~' -PERL_API_REVISION='~PERL_API_REVISION~' -PERL_API_SUBVERSION='~PERL_API_SUBVERSION~' -PERL_API_VERSION='~PERL_API_VERSION~' -PATCHLEVEL='~PERL_VERSION~' -PERL_CONFIG_SH='true' diff --git a/wince/config_H.ce b/wince/config_H.ce deleted file mode 100644 index 9936f7643d..0000000000 --- a/wince/config_H.ce +++ /dev/null @@ -1,4371 +0,0 @@ -/* - * This file was produced by running the config_h.SH script, which - * gets its values from undef, which is generally produced by - * running Configure. - * - * Feel free to modify any of this as the need arises. Note, however, - * that running config_h.SH again will wipe out any changes you've made. - * For a more permanent change edit undef and rerun config_h.SH. - * - * $Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $ - */ - -/* - * Package name : perl5 - * Source directory : - * Configuration time: Thu Nov 10 20:47:18 2005 - * Configured by : vkon - * Target system : - */ - -#ifndef _config_h_ -#define _config_h_ - -/* LOC_SED: - * This symbol holds the complete pathname to the sed program. - */ -#define LOC_SED "" /**/ - -/* HAS_ALARM: - * This symbol, if defined, indicates that the alarm routine is - * available. - */ -/*#define HAS_ALARM /**/ - -/* HAS_BCMP: - * This symbol is defined if the bcmp() routine is available to - * compare blocks of memory. - */ -/*#define HAS_BCMP /**/ - -/* HAS_BCOPY: - * This symbol is defined if the bcopy() routine is available to - * copy blocks of memory. - */ -/*#define HAS_BCOPY /**/ - -/* HAS_BZERO: - * This symbol is defined if the bzero() routine is available to - * set a memory block to 0. - */ -/*#define HAS_BZERO /**/ - -/* HAS_CHOWN: - * This symbol, if defined, indicates that the chown routine is - * available. - */ -/*#define HAS_CHOWN /**/ - -/* HAS_CHROOT: - * This symbol, if defined, indicates that the chroot routine is - * available. - */ -/*#define HAS_CHROOT /**/ - -/* HAS_CHSIZE: - * This symbol, if defined, indicates that the chsize routine is available - * to truncate files. You might need a -lx to get this routine. - */ -#define HAS_CHSIZE /**/ - -/* HASCONST: - * This symbol, if defined, indicates that this C compiler knows about - * the const type. There is no need to actually test for that symbol - * within your programs. The mere use of the "const" keyword will - * trigger the necessary tests. - */ -#define HASCONST /**/ -#ifndef HASCONST -#define const -#endif - -/* HAS_CUSERID: - * This symbol, if defined, indicates that the cuserid routine is - * available to get character login names. - */ -/*#define HAS_CUSERID /**/ - -/* HAS_DBL_DIG: - * This symbol, if defined, indicates that this system's <float.h> - * or <limits.h> defines the symbol DBL_DIG, which is the number - * of significant digits in a double precision number. If this - * symbol is not defined, a guess of 15 is usually pretty good. - */ -#define HAS_DBL_DIG /**/ - -/* HAS_DIFFTIME: - * This symbol, if defined, indicates that the difftime routine is - * available. - */ -#define HAS_DIFFTIME /**/ - -/* HAS_DLERROR: - * This symbol, if defined, indicates that the dlerror routine is - * available to return a string describing the last error that - * occurred from a call to dlopen(), dlclose() or dlsym(). - */ -#define HAS_DLERROR /**/ - -/* HAS_DUP2: - * This symbol, if defined, indicates that the dup2 routine is - * available to duplicate file descriptors. - */ -#define HAS_DUP2 /**/ - -/* HAS_FCHMOD: - * This symbol, if defined, indicates that the fchmod routine is available - * to change mode of opened files. If unavailable, use chmod(). - */ -/*#define HAS_FCHMOD /**/ - -/* HAS_FCHOWN: - * This symbol, if defined, indicates that the fchown routine is available - * to change ownership of opened files. If unavailable, use chown(). - */ -/*#define HAS_FCHOWN /**/ - -/* HAS_FCNTL: - * This symbol, if defined, indicates to the C program that - * the fcntl() function exists. - */ -/*#define HAS_FCNTL /**/ - -/* HAS_FGETPOS: - * This symbol, if defined, indicates that the fgetpos routine is - * available to get the file position indicator, similar to ftell(). - */ -#define HAS_FGETPOS /**/ - -/* HAS_FLOCK: - * This symbol, if defined, indicates that the flock routine is - * available to do file locking. - */ -/*#define HAS_FLOCK /**/ - -/* HAS_FORK: - * This symbol, if defined, indicates that the fork routine is - * available. - */ -/*#define HAS_FORK /**/ - -/* HAS_FSETPOS: - * This symbol, if defined, indicates that the fsetpos routine is - * available to set the file position indicator, similar to fseek(). - */ -#define HAS_FSETPOS /**/ - -/* HAS_GETTIMEOFDAY: - * This symbol, if defined, indicates that the gettimeofday() system - * call is available for a sub-second accuracy clock. Usually, the file - * <sys/resource.h> needs to be included (see I_SYS_RESOURCE). - * The type "Timeval" should be used to refer to "struct timeval". - */ -/*#define HAS_GETTIMEOFDAY /**/ -#ifdef HAS_GETTIMEOFDAY -#define Timeval struct timeval /* Structure used by gettimeofday() */ -#endif - -/* HAS_GETGROUPS: - * This symbol, if defined, indicates that the getgroups() routine is - * available to get the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -/*#define HAS_GETGROUPS /**/ - -/* HAS_GETLOGIN: - * This symbol, if defined, indicates that the getlogin routine is - * available to get the login name. - */ -#define HAS_GETLOGIN /**/ - -/* HAS_GETPGID: - * This symbol, if defined, indicates to the C program that - * the getpgid(pid) function is available to get the - * process group id. - */ -/*#define HAS_GETPGID /**/ - -/* HAS_GETPGRP2: - * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX) - * routine is available to get the current process group. - */ -/*#define HAS_GETPGRP2 /**/ - -/* HAS_GETPPID: - * This symbol, if defined, indicates that the getppid routine is - * available to get the parent process ID. - */ -/*#define HAS_GETPPID /**/ - -/* HAS_GETPRIORITY: - * This symbol, if defined, indicates that the getpriority routine is - * available to get a process's priority. - */ -/*#define HAS_GETPRIORITY /**/ - -/* HAS_INET_ATON: - * This symbol, if defined, indicates to the C program that the - * inet_aton() function is available to parse IP address "dotted-quad" - * strings. - */ -/*#define HAS_INET_ATON /**/ - -/* HAS_KILLPG: - * This symbol, if defined, indicates that the killpg routine is available - * to kill process groups. If unavailable, you probably should use kill - * with a negative process number. - */ -/*#define HAS_KILLPG /**/ - -/* HAS_LINK: - * This symbol, if defined, indicates that the link routine is - * available to create hard links. - */ -#define HAS_LINK /**/ - -/* HAS_LOCALECONV: - * This symbol, if defined, indicates that the localeconv routine is - * available for numeric and monetary formatting conventions. - */ -#define HAS_LOCALECONV /**/ - -/* HAS_LOCKF: - * This symbol, if defined, indicates that the lockf routine is - * available to do file locking. - */ -/*#define HAS_LOCKF /**/ - -/* HAS_LSTAT: - * This symbol, if defined, indicates that the lstat routine is - * available to do file stats on symbolic links. - */ -/*#define HAS_LSTAT /**/ - -/* HAS_MBLEN: - * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. - */ -#define HAS_MBLEN /**/ - -/* HAS_MBSTOWCS: - * This symbol, if defined, indicates that the mbstowcs routine is - * available to covert a multibyte string into a wide character string. - */ -#define HAS_MBSTOWCS /**/ - -/* HAS_MBTOWC: - * This symbol, if defined, indicates that the mbtowc routine is available - * to covert a multibyte to a wide character. - */ -#define HAS_MBTOWC /**/ - -/* HAS_MEMCMP: - * This symbol, if defined, indicates that the memcmp routine is available - * to compare blocks of memory. - */ -#define HAS_MEMCMP /**/ - -/* HAS_MEMCPY: - * This symbol, if defined, indicates that the memcpy routine is available - * to copy blocks of memory. - */ -#define HAS_MEMCPY /**/ - -/* HAS_MEMMOVE: - * This symbol, if defined, indicates that the memmove routine is available - * to copy potentially overlapping blocks of memory. This should be used - * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your - * own version. - */ -#define HAS_MEMMOVE /**/ - -/* HAS_MEMSET: - * This symbol, if defined, indicates that the memset routine is available - * to set blocks of memory. - */ -#define HAS_MEMSET /**/ - -/* HAS_MKDIR: - * This symbol, if defined, indicates that the mkdir routine is available - * to create directories. Otherwise you should fork off a new process to - * exec /bin/mkdir. - */ -#define HAS_MKDIR /**/ - -/* HAS_MKFIFO: - * This symbol, if defined, indicates that the mkfifo routine is - * available to create FIFOs. Otherwise, mknod should be able to - * do it for you. However, if mkfifo is there, mknod might require - * super-user privileges which mkfifo will not. - */ -/*#define HAS_MKFIFO /**/ - -/* HAS_MKTIME: - * This symbol, if defined, indicates that the mktime routine is - * available. - */ -#define HAS_MKTIME /**/ - -/* HAS_MSYNC: - * This symbol, if defined, indicates that the msync system call is - * available to synchronize a mapped file. - */ -/*#define HAS_MSYNC /**/ - -/* HAS_MUNMAP: - * This symbol, if defined, indicates that the munmap system call is - * available to unmap a region, usually mapped by mmap(). - */ -/*#define HAS_MUNMAP /**/ - -/* HAS_NICE: - * This symbol, if defined, indicates that the nice routine is - * available. - */ -/*#define HAS_NICE /**/ - -/* HAS_PATHCONF: - * This symbol, if defined, indicates that pathconf() is available - * to determine file-system related limits and options associated - * with a given filename. - */ -/* HAS_FPATHCONF: - * This symbol, if defined, indicates that pathconf() is available - * to determine file-system related limits and options associated - * with a given open file descriptor. - */ -/*#define HAS_PATHCONF /**/ -/*#define HAS_FPATHCONF /**/ - -/* HAS_PAUSE: - * This symbol, if defined, indicates that the pause routine is - * available to suspend a process until a signal is received. - */ -#define HAS_PAUSE /**/ - -/* HAS_PIPE: - * This symbol, if defined, indicates that the pipe routine is - * available to create an inter-process channel. - */ -/*#define HAS_PIPE /**/ - -/* HAS_POLL: - * This symbol, if defined, indicates that the poll routine is - * available to poll active file descriptors. You may safely - * include <poll.h> when this symbol is defined. - */ -/*#define HAS_POLL /**/ - -/* HAS_READDIR: - * This symbol, if defined, indicates that the readdir routine is - * available to read directory entries. You may have to include - * <dirent.h>. See I_DIRENT. - */ -#define HAS_READDIR /**/ - -/* HAS_SEEKDIR: - * This symbol, if defined, indicates that the seekdir routine is - * available. You may have to include <dirent.h>. See I_DIRENT. - */ -#define HAS_SEEKDIR /**/ - -/* HAS_TELLDIR: - * This symbol, if defined, indicates that the telldir routine is - * available. You may have to include <dirent.h>. See I_DIRENT. - */ -#define HAS_TELLDIR /**/ - -/* HAS_REWINDDIR: - * This symbol, if defined, indicates that the rewinddir routine is - * available. You may have to include <dirent.h>. See I_DIRENT. - */ -#define HAS_REWINDDIR /**/ - -/* HAS_READLINK: - * This symbol, if defined, indicates that the readlink routine is - * available to read the value of a symbolic link. - */ -/*#define HAS_READLINK /**/ - -/* HAS_RENAME: - * This symbol, if defined, indicates that the rename routine is available - * to rename files. Otherwise you should do the unlink(), link(), unlink() - * trick. - */ -#define HAS_RENAME /**/ - -/* HAS_RMDIR: - * This symbol, if defined, indicates that the rmdir routine is - * available to remove directories. Otherwise you should fork off a - * new process to exec /bin/rmdir. - */ -#define HAS_RMDIR /**/ - -/* HAS_SELECT: - * This symbol, if defined, indicates that the select routine is - * available to select active file descriptors. If the timeout field - * is used, <sys/time.h> may need to be included. - */ -#define HAS_SELECT /**/ - -/* HAS_SETEGID: - * This symbol, if defined, indicates that the setegid routine is available - * to change the effective gid of the current program. - */ -/*#define HAS_SETEGID /**/ - -/* HAS_SETEUID: - * This symbol, if defined, indicates that the seteuid routine is available - * to change the effective uid of the current program. - */ -/*#define HAS_SETEUID /**/ - -/* HAS_SETLINEBUF: - * This symbol, if defined, indicates that the setlinebuf routine is - * available to change stderr or stdout from block-buffered or unbuffered - * to a line-buffered mode. - */ -/*#define HAS_SETLINEBUF /**/ - -/* HAS_SETLOCALE: - * This symbol, if defined, indicates that the setlocale routine is - * available to handle locale-specific ctype implementations. - */ -#define HAS_SETLOCALE /**/ - -/* HAS_SETPGID: - * This symbol, if defined, indicates that the setpgid(pid, gpid) - * routine is available to set process group ID. - */ -/*#define HAS_SETPGID /**/ - -/* HAS_SETPGRP2: - * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) - * routine is available to set the current process group. - */ -/*#define HAS_SETPGRP2 /**/ - -/* HAS_SETPRIORITY: - * This symbol, if defined, indicates that the setpriority routine is - * available to set a process's priority. - */ -/*#define HAS_SETPRIORITY /**/ - -/* HAS_SETREGID: - * This symbol, if defined, indicates that the setregid routine is - * available to change the real and effective gid of the current - * process. - */ -/* HAS_SETRESGID: - * This symbol, if defined, indicates that the setresgid routine is - * available to change the real, effective and saved gid of the current - * process. - */ -/*#define HAS_SETREGID /**/ -/*#define HAS_SETRESGID /**/ - -/* HAS_SETREUID: - * This symbol, if defined, indicates that the setreuid routine is - * available to change the real and effective uid of the current - * process. - */ -/* HAS_SETRESUID: - * This symbol, if defined, indicates that the setresuid routine is - * available to change the real, effective and saved uid of the current - * process. - */ -/*#define HAS_SETREUID /**/ -/*#define HAS_SETRESUID /**/ - -/* HAS_SETRGID: - * This symbol, if defined, indicates that the setrgid routine is available - * to change the real gid of the current program. - */ -/*#define HAS_SETRGID /**/ - -/* HAS_SETRUID: - * This symbol, if defined, indicates that the setruid routine is available - * to change the real uid of the current program. - */ -/*#define HAS_SETRUID /**/ - -/* HAS_SETSID: - * This symbol, if defined, indicates that the setsid routine is - * available to set the process group ID. - */ -/*#define HAS_SETSID /**/ - -/* HAS_STRCHR: - * This symbol is defined to indicate that the strchr()/strrchr() - * functions are available for string searching. If not, try the - * index()/rindex() pair. - */ -/* HAS_INDEX: - * This symbol is defined to indicate that the index()/rindex() - * functions are available for string searching. - */ -#define HAS_STRCHR /**/ -/*#define HAS_INDEX /**/ - -/* HAS_STRCOLL: - * This symbol, if defined, indicates that the strcoll routine is - * available to compare strings using collating information. - */ -#define HAS_STRCOLL /**/ - -/* USE_STRUCT_COPY: - * This symbol, if defined, indicates that this C compiler knows how - * to copy structures. If undefined, you'll need to use a block copy - * routine of some sort instead. - */ -#define USE_STRUCT_COPY /**/ - -/* HAS_STRTOD: - * This symbol, if defined, indicates that the strtod routine is - * available to provide better numeric string conversion than atof(). - */ -#define HAS_STRTOD /**/ - -/* HAS_STRTOL: - * This symbol, if defined, indicates that the strtol routine is available - * to provide better numeric string conversion than atoi() and friends. - */ -#define HAS_STRTOL /**/ - -/* HAS_STRXFRM: - * This symbol, if defined, indicates that the strxfrm() routine is - * available to transform strings. - */ -/*#define HAS_STRXFRM /**/ - -/* HAS_SYMLINK: - * This symbol, if defined, indicates that the symlink routine is available - * to create symbolic links. - */ -/*#define HAS_SYMLINK /**/ - -/* HAS_SYSCALL: - * This symbol, if defined, indicates that the syscall routine is - * available to call arbitrary system calls. If undefined, that's tough. - */ -/*#define HAS_SYSCALL /**/ - -/* HAS_SYSCONF: - * This symbol, if defined, indicates that sysconf() is available - * to determine system related limits and options. - */ -/*#define HAS_SYSCONF /**/ - -/* HAS_SYSTEM: - * This symbol, if defined, indicates that the system routine is - * available to issue a shell command. - */ -#define HAS_SYSTEM /**/ - -/* HAS_TCGETPGRP: - * This symbol, if defined, indicates that the tcgetpgrp routine is - * available to get foreground process group ID. - */ -/*#define HAS_TCGETPGRP /**/ - -/* HAS_TCSETPGRP: - * This symbol, if defined, indicates that the tcsetpgrp routine is - * available to set foreground process group ID. - */ -/*#define HAS_TCSETPGRP /**/ - -/* HAS_TRUNCATE: - * This symbol, if defined, indicates that the truncate routine is - * available to truncate files. - */ -/*#define HAS_TRUNCATE /**/ - -/* HAS_TZNAME: - * This symbol, if defined, indicates that the tzname[] array is - * available to access timezone names. - */ -#define HAS_TZNAME /**/ - -/* HAS_UMASK: - * This symbol, if defined, indicates that the umask routine is - * available to set and get the value of the file creation mask. - */ -#define HAS_UMASK /**/ - -/* HAS_USLEEP: - * This symbol, if defined, indicates that the usleep routine is - * available to let the process sleep on a sub-second accuracy. - */ -/*#define HAS_USLEEP /**/ - -/* HASVOLATILE: - * This symbol, if defined, indicates that this C compiler knows about - * the volatile declaration. - */ -#define HASVOLATILE /**/ -#ifndef HASVOLATILE -#define volatile -#endif - -/* HAS_WAIT4: - * This symbol, if defined, indicates that wait4() exists. - */ -/*#define HAS_WAIT4 /**/ - -/* HAS_WAITPID: - * This symbol, if defined, indicates that the waitpid routine is - * available to wait for child process. - */ -#define HAS_WAITPID /**/ - -/* HAS_WCSTOMBS: - * This symbol, if defined, indicates that the wcstombs routine is - * available to convert wide character strings to multibyte strings. - */ -#define HAS_WCSTOMBS /**/ - -/* HAS_WCTOMB: - * This symbol, if defined, indicates that the wctomb routine is available - * to covert a wide character to a multibyte. - */ -#define HAS_WCTOMB /**/ - -/* I_ARPA_INET: - * This symbol, if defined, indicates to the C program that it should - * include <arpa/inet.h> to get inet_addr and friends declarations. - */ -#define I_ARPA_INET /**/ - -/* I_DBM: - * This symbol, if defined, indicates that <dbm.h> exists and should - * be included. - */ -/* I_RPCSVC_DBM: - * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and - * should be included. - */ -/*#define I_DBM /**/ -#define I_RPCSVC_DBM /**/ - -/* I_DIRENT: - * This symbol, if defined, indicates to the C program that it should - * include <dirent.h>. Using this symbol also triggers the definition - * of the Direntry_t define which ends up being 'struct dirent' or - * 'struct direct' depending on the availability of <dirent.h>. - */ -/* DIRNAMLEN: - * This symbol, if defined, indicates to the C program that the length - * of directory entry names is provided by a d_namlen field. Otherwise - * you need to do strlen() on the d_name field. - */ -/* Direntry_t: - * This symbol is set to 'struct direct' or 'struct dirent' depending on - * whether dirent is available or not. You should use this pseudo type to - * portably declare your directory entries. - */ -#define I_DIRENT /**/ -#define DIRNAMLEN /**/ -#define Direntry_t struct direct - -/* I_DLFCN: - * This symbol, if defined, indicates that <dlfcn.h> exists and should - * be included. - */ -#define I_DLFCN /**/ - -/* I_FCNTL: - * This manifest constant tells the C program to include <fcntl.h>. - */ -#define I_FCNTL /**/ - -/* I_FLOAT: - * This symbol, if defined, indicates to the C program that it should - * include <float.h> to get definition of symbols like DBL_MAX or - * DBL_MIN, i.e. machine dependent floating point values. - */ -#define I_FLOAT /**/ - -/* I_LIMITS: - * This symbol, if defined, indicates to the C program that it should - * include <limits.h> to get definition of symbols like WORD_BIT or - * LONG_MAX, i.e. machine dependant limitations. - */ -#define I_LIMITS /**/ - -/* I_LOCALE: - * This symbol, if defined, indicates to the C program that it should - * include <locale.h>. - */ -/*#define I_LOCALE /**/ - -/* I_MATH: - * This symbol, if defined, indicates to the C program that it should - * include <math.h>. - */ -#define I_MATH /**/ - -/* I_MEMORY: - * This symbol, if defined, indicates to the C program that it should - * include <memory.h>. - */ -/*#define I_MEMORY /**/ - -/* I_NET_ERRNO: - * This symbol, if defined, indicates that <net/errno.h> exists and - * should be included. - */ -/*#define I_NET_ERRNO /**/ - -/* I_NETINET_IN: - * This symbol, if defined, indicates to the C program that it should - * include <netinet/in.h>. Otherwise, you may try <sys/in.h>. - */ -/*#define I_NETINET_IN /**/ - -/* I_SFIO: - * This symbol, if defined, indicates to the C program that it should - * include <sfio.h>. - */ -/*#define I_SFIO /**/ - -/* I_STDDEF: - * This symbol, if defined, indicates that <stddef.h> exists and should - * be included. - */ -#define I_STDDEF /**/ - -/* I_STDLIB: - * This symbol, if defined, indicates that <stdlib.h> exists and should - * be included. - */ -#define I_STDLIB /**/ - -/* I_STRING: - * This symbol, if defined, indicates to the C program that it should - * include <string.h> (USG systems) instead of <strings.h> (BSD systems). - */ -#define I_STRING /**/ - -/* I_SYS_DIR: - * This symbol, if defined, indicates to the C program that it should - * include <sys/dir.h>. - */ -/*#define I_SYS_DIR /**/ - -/* I_SYS_FILE: - * This symbol, if defined, indicates to the C program that it should - * include <sys/file.h> to get definition of R_OK and friends. - */ -/*#define I_SYS_FILE /**/ - -/* I_SYS_IOCTL: - * This symbol, if defined, indicates that <sys/ioctl.h> exists and should - * be included. Otherwise, include <sgtty.h> or <termio.h>. - */ -/* I_SYS_SOCKIO: - * This symbol, if defined, indicates the <sys/sockio.h> should be included - * to get socket ioctl options, like SIOCATMARK. - */ -/*#define I_SYS_IOCTL /**/ -/*#define I_SYS_SOCKIO /**/ - -/* I_SYS_NDIR: - * This symbol, if defined, indicates to the C program that it should - * include <sys/ndir.h>. - */ -/*#define I_SYS_NDIR /**/ - -/* I_SYS_PARAM: - * This symbol, if defined, indicates to the C program that it should - * include <sys/param.h>. - */ -/*#define I_SYS_PARAM /**/ - -/* I_SYS_RESOURCE: - * This symbol, if defined, indicates to the C program that it should - * include <sys/resource.h>. - */ -/*#define I_SYS_RESOURCE /**/ - -/* I_SYS_SELECT: - * This symbol, if defined, indicates to the C program that it should - * include <sys/select.h> in order to get definition of struct timeval. - */ -/*#define I_SYS_SELECT /**/ - -/* I_SYS_STAT: - * This symbol, if defined, indicates to the C program that it should - * include <sys/stat.h>. - */ -#define I_SYS_STAT /**/ - -/* I_SYS_TIMES: - * This symbol, if defined, indicates to the C program that it should - * include <sys/times.h>. - */ -/*#define I_SYS_TIMES /**/ - -/* I_SYS_TYPES: - * This symbol, if defined, indicates to the C program that it should - * include <sys/types.h>. - */ -/*#define I_SYS_TYPES /**/ - -/* I_SYS_UN: - * This symbol, if defined, indicates to the C program that it should - * include <sys/un.h> to get UNIX domain socket definitions. - */ -/*#define I_SYS_UN /**/ - -/* I_SYS_WAIT: - * This symbol, if defined, indicates to the C program that it should - * include <sys/wait.h>. - */ -/*#define I_SYS_WAIT /**/ - -/* I_TERMIO: - * This symbol, if defined, indicates that the program should include - * <termio.h> rather than <sgtty.h>. There are also differences in - * the ioctl() calls that depend on the value of this symbol. - */ -/* I_TERMIOS: - * This symbol, if defined, indicates that the program should include - * the POSIX termios.h rather than sgtty.h or termio.h. - * There are also differences in the ioctl() calls that depend on the - * value of this symbol. - */ -/* I_SGTTY: - * This symbol, if defined, indicates that the program should include - * <sgtty.h> rather than <termio.h>. There are also differences in - * the ioctl() calls that depend on the value of this symbol. - */ -/*#define I_TERMIO /**/ -/*#define I_TERMIOS /**/ -/*#define I_SGTTY /**/ - -/* I_UNISTD: - * This symbol, if defined, indicates to the C program that it should - * include <unistd.h>. - */ -/*#define I_UNISTD /**/ - -/* I_UTIME: - * This symbol, if defined, indicates to the C program that it should - * include <utime.h>. - */ -#define I_UTIME /**/ - -/* I_VALUES: - * This symbol, if defined, indicates to the C program that it should - * include <values.h> to get definition of symbols like MINFLOAT or - * MAXLONG, i.e. machine dependant limitations. Probably, you - * should use <limits.h> instead, if it is available. - */ -/*#define I_VALUES /**/ - -/* I_VFORK: - * This symbol, if defined, indicates to the C program that it should - * include vfork.h. - */ -/*#define I_VFORK /**/ - -/* HAS_ACCESSX: - * This symbol, if defined, indicates that the accessx routine is - * available to do extended access checks. - */ -/*#define HAS_ACCESSX /**/ - -/* HAS_EACCESS: - * This symbol, if defined, indicates that the eaccess routine is - * available to do extended access checks. - */ -/*#define HAS_EACCESS /**/ - -/* I_SYS_ACCESS: - * This symbol, if defined, indicates to the C program that it should - * include <sys/access.h>. - */ -/*#define I_SYS_ACCESS /**/ - -/* I_SYS_SECURITY: - * This symbol, if defined, indicates to the C program that it should - * include <sys/security.h>. - */ -/*#define I_SYS_SECURITY /**/ - -/* OSNAME: - * This symbol contains the name of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -/* OSVERS: - * This symbol contains the version of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -#define OSNAME "MSWin32" /**/ -#define OSVERS "4.0" /**/ - -/* USE_CROSS_COMPILE: - * This symbol, if defined, indicates that Perl is being cross-compiled. - */ -/* PERL_TARGETARCH: - * This symbol, if defined, indicates the target architecture - * Perl has been cross-compiled to. Undefined if not a cross-compile. - */ -#ifndef USE_CROSS_COMPILE -/*#define USE_CROSS_COMPILE /**/ -#define PERL_TARGETARCH "undef" /**/ -#endif - -/* MULTIARCH: - * This symbol, if defined, signifies that the build - * process will produce some binary files that are going to be - * used in a cross-platform environment. This is the case for - * example with the NeXT "fat" binaries that contain executables - * for several CPUs. - */ -/*#define MULTIARCH /**/ - -/* MEM_ALIGNBYTES: - * This symbol contains the number of bytes required to align a - * double, or a long double when applicable. Usual values are 2, - * 4 and 8. The default is eight, for safety. - */ -#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) -# define MEM_ALIGNBYTES 8 -#else -#define MEM_ALIGNBYTES 8 -#endif - -/* ARCHLIB: - * This variable, if defined, holds the name of the directory in - * which the user wants to put architecture-dependent public - * library files for perl5. It is most often a local directory - * such as /usr/local/lib. Programs using this variable must be - * prepared to deal with filename expansion. If ARCHLIB is the - * same as PRIVLIB, it is not defined, since presumably the - * program already searches PRIVLIB. - */ -/* ARCHLIB_EXP: - * This symbol contains the ~name expanded version of ARCHLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define ARCHLIB "\\Storage Card\\perl58m\\lib" /**/ -/*#define ARCHLIB_EXP "" /**/ - -/* ARCHNAME: - * This symbol holds a string representing the architecture name. - * It may be used to construct an architecture-dependant pathname - * where library files may be held under a private library, for - * instance. - */ -#define ARCHNAME "MS Pocket PC-WCE300-ARM" /**/ - -/* HAS_ATOLF: - * This symbol, if defined, indicates that the atolf routine is - * available to convert strings into long doubles. - */ -/*#define HAS_ATOLF /**/ - -/* HAS_ATOLL: - * This symbol, if defined, indicates that the atoll routine is - * available to convert strings into long longs. - */ -/*#define HAS_ATOLL /**/ - -/* BIN: - * This symbol holds the path of the bin directory where the package will - * be installed. Program must be prepared to deal with ~name substitution. - */ -/* BIN_EXP: - * This symbol is the filename expanded version of the BIN symbol, for - * programs that do not want to deal with that at run-time. - */ -#define BIN "\\Storage Card\\perl58m\\bin" /**/ -#define BIN_EXP "\\Storage Card\\perl58m\\bin" /**/ - -/* INTSIZE: - * This symbol contains the value of sizeof(int) so that the C - * preprocessor can make decisions based on it. - */ -/* LONGSIZE: - * This symbol contains the value of sizeof(long) so that the C - * preprocessor can make decisions based on it. - */ -/* SHORTSIZE: - * This symbol contains the value of sizeof(short) so that the C - * preprocessor can make decisions based on it. - */ -#define INTSIZE 4 /**/ -#define LONGSIZE 4 /**/ -#define SHORTSIZE 2 /**/ - -/* BYTEORDER: - * This symbol holds the hexadecimal constant defined in byteorder, - * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc... - * If the compiler supports cross-compiling or multiple-architecture - * binaries (eg. on NeXT systems), use compiler-defined macros to - * determine the byte order. - * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture - * Binaries (MAB) on either big endian or little endian machines. - * The endian-ness is available at compile-time. This only matters - * for perl, where the config.h can be generated and installed on - * one system, and used by a different architecture to build an - * extension. Older versions of NeXT that might not have - * defined either *_ENDIAN__ were all on Motorola 680x0 series, - * so the default case (for NeXT) is big endian to catch them. - * This might matter for NeXT 3.0. - */ -#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) -# ifdef __LITTLE_ENDIAN__ -# if LONGSIZE == 4 -# define BYTEORDER 0x1234 -# else -# if LONGSIZE == 8 -# define BYTEORDER 0x12345678 -# endif -# endif -# else -# ifdef __BIG_ENDIAN__ -# if LONGSIZE == 4 -# define BYTEORDER 0x4321 -# else -# if LONGSIZE == 8 -# define BYTEORDER 0x87654321 -# endif -# endif -# endif -# endif -# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__)) -# define BYTEORDER 0x4321 -# endif -#else -#define BYTEORDER 0x1234 /* large digits for MSB */ -#endif /* NeXT */ - -/* CAT2: - * This macro concatenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if 42 == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" - /* If you can get stringification with catify, tell me how! */ -#endif -#if 42 == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -/* the additional level of indirection enables these macros to be - * used as arguments to other macros. See K&R 2nd ed., page 231. */ -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if 42 != 1 && 42 != 42 -# include "Bletch: How does this C preprocessor concatenate tokens?" -#endif - -/* CPPSTDIN: - * This symbol contains the first part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -E" or "/lib/cpp", but it can also - * call a wrapper. See CPPRUN. - */ -/* CPPMINUS: - * This symbol contains the second part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. This symbol will have the value "-" if CPPSTDIN needs a minus - * to specify standard input, otherwise the value is "". - */ -/* CPPRUN: - * This symbol contains the string which will invoke a C preprocessor on - * the standard input and produce to standard output. It needs to end - * with CPPLAST, after all other preprocessor flags have been specified. - * The main difference with CPPSTDIN is that this program will never be a - * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is - * available directly to the user. Note that it may well be different from - * the preprocessor used to compile the C program. - */ -/* CPPLAST: - * This symbol is intended to be used along with CPPRUN in the same manner - * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". - */ -#define CPPSTDIN "clarm.exe -nologo -E" -#define CPPMINUS "" -#define CPPRUN "clarm.exe -nologo -E" -#define CPPLAST "" - -/* HAS__FWALK: - * This symbol, if defined, indicates that the _fwalk system call is - * available to apply a function to all the file handles. - */ -/*#define HAS__FWALK /**/ - -/* HAS_ACCESS: - * This manifest constant lets the C program know that the access() - * system call is available to check for accessibility using real UID/GID. - * (always present on UNIX.) - */ -#define HAS_ACCESS /**/ - -/* HAS_ASCTIME_R: - * This symbol, if defined, indicates that the asctime_r routine - * is available to asctime re-entrantly. - */ -/* ASCTIME_R_PROTO: - * This symbol encodes the prototype of asctime_r. - * It is zero if d_asctime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r - * is defined. - */ -/*#define HAS_ASCTIME_R /**/ -#define ASCTIME_R_PROTO 0 /**/ - -/* CASTI32: - * This symbol is defined if the C compiler can cast negative - * or large floating point numbers to 32-bit ints. - */ -/*#define CASTI32 /**/ - -/* CASTNEGFLOAT: - * This symbol is defined if the C compiler can cast negative - * numbers to unsigned longs, ints and shorts. - */ -/* CASTFLAGS: - * This symbol contains flags that say what difficulties the compiler - * has casting odd floating values to unsigned long: - * 0 = ok - * 1 = couldn't cast < 0 - * 2 = couldn't cast >= 0x80000000 - * 4 = couldn't cast in argument expression list - */ -#define CASTNEGFLOAT /**/ -#define CASTFLAGS 0 /**/ - -/* HAS_CLASS: - * This symbol, if defined, indicates that the class routine is - * available to classify doubles. Available for example in AIX. - * The returned values are defined in <float.h> and are: - * - * FP_PLUS_NORM Positive normalized, nonzero - * FP_MINUS_NORM Negative normalized, nonzero - * FP_PLUS_DENORM Positive denormalized, nonzero - * FP_MINUS_DENORM Negative denormalized, nonzero - * FP_PLUS_ZERO +0.0 - * FP_MINUS_ZERO -0.0 - * FP_PLUS_INF +INF - * FP_MINUS_INF -INF - * FP_NANS Signaling Not a Number (NaNS) - * FP_NANQ Quiet Not a Number (NaNQ) - */ -/*#define HAS_CLASS /**/ - -/* VOID_CLOSEDIR: - * This symbol, if defined, indicates that the closedir() routine - * does not return a value. - */ -/*#define VOID_CLOSEDIR /**/ - -/* HAS_STRUCT_CMSGHDR: - * This symbol, if defined, indicates that the struct cmsghdr - * is supported. - */ -/*#define HAS_STRUCT_CMSGHDR /**/ - -/* HAS_CRYPT_R: - * This symbol, if defined, indicates that the crypt_r routine - * is available to crypt re-entrantly. - */ -/* CRYPT_R_PROTO: - * This symbol encodes the prototype of crypt_r. - * It is zero if d_crypt_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r - * is defined. - */ -/*#define HAS_CRYPT_R /**/ -#define CRYPT_R_PROTO 0 /**/ - -/* HAS_CSH: - * This symbol, if defined, indicates that the C-shell exists. - */ -/* CSH: - * This symbol, if defined, contains the full pathname of csh. - */ -/*#define HAS_CSH /**/ -#ifdef HAS_CSH -#define CSH "" /**/ -#endif - -/* HAS_CTIME_R: - * This symbol, if defined, indicates that the ctime_r routine - * is available to ctime re-entrantly. - */ -/* CTIME_R_PROTO: - * This symbol encodes the prototype of ctime_r. - * It is zero if d_ctime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r - * is defined. - */ -/*#define HAS_CTIME_R /**/ -#define CTIME_R_PROTO 0 /**/ - -/* DLSYM_NEEDS_UNDERSCORE: - * This symbol, if defined, indicates that we need to prepend an - * underscore to the symbol name before calling dlsym(). This only - * makes sense if you *have* dlsym, which we will presume is the - * case if you're using dl_dlopen.xs. - */ -/*#define DLSYM_NEEDS_UNDERSCORE /**/ - -/* HAS_DRAND48_R: - * This symbol, if defined, indicates that the drand48_r routine - * is available to drand48 re-entrantly. - */ -/* DRAND48_R_PROTO: - * This symbol encodes the prototype of drand48_r. - * It is zero if d_drand48_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r - * is defined. - */ -/*#define HAS_DRAND48_R /**/ -#define DRAND48_R_PROTO 0 /**/ - -/* HAS_DRAND48_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the drand48() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern double drand48(void); - */ -/*#define HAS_DRAND48_PROTO /**/ - -/* HAS_ENDGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the group database. - */ -/*#define HAS_ENDGRENT /**/ - -/* HAS_ENDGRENT_R: - * This symbol, if defined, indicates that the endgrent_r routine - * is available to endgrent re-entrantly. - */ -/* ENDGRENT_R_PROTO: - * This symbol encodes the prototype of endgrent_r. - * It is zero if d_endgrent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r - * is defined. - */ -/*#define HAS_ENDGRENT_R /**/ -#define ENDGRENT_R_PROTO 0 /**/ - -/* HAS_ENDHOSTENT: - * This symbol, if defined, indicates that the endhostent() routine is - * available to close whatever was being used for host queries. - */ -/*#define HAS_ENDHOSTENT /**/ - -/* HAS_ENDNETENT: - * This symbol, if defined, indicates that the endnetent() routine is - * available to close whatever was being used for network queries. - */ -/*#define HAS_ENDNETENT /**/ - -/* HAS_ENDPROTOENT: - * This symbol, if defined, indicates that the endprotoent() routine is - * available to close whatever was being used for protocol queries. - */ -/*#define HAS_ENDPROTOENT /**/ - -/* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the passwd database. - */ -/*#define HAS_ENDPWENT /**/ - -/* HAS_ENDPWENT_R: - * This symbol, if defined, indicates that the endpwent_r routine - * is available to endpwent re-entrantly. - */ -/* ENDPWENT_R_PROTO: - * This symbol encodes the prototype of endpwent_r. - * It is zero if d_endpwent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r - * is defined. - */ -/*#define HAS_ENDPWENT_R /**/ -#define ENDPWENT_R_PROTO 0 /**/ - -/* HAS_ENDSERVENT: - * This symbol, if defined, indicates that the endservent() routine is - * available to close whatever was being used for service queries. - */ -/*#define HAS_ENDSERVENT /**/ - -/* HAS_FCHDIR: - * This symbol, if defined, indicates that the fchdir routine is - * available to change directory using a file descriptor. - */ -/*#define HAS_FCHDIR /**/ - -/* FCNTL_CAN_LOCK: - * This symbol, if defined, indicates that fcntl() can be used - * for file locking. Normally on Unix systems this is defined. - * It may be undefined on VMS. - */ -/*#define FCNTL_CAN_LOCK /**/ - -/* HAS_FD_SET: - * This symbol, when defined, indicates presence of the fd_set typedef - * in <sys/types.h> - */ -#define HAS_FD_SET /**/ - -/* HAS_FINITE: - * This symbol, if defined, indicates that the finite routine is - * available to check whether a double is finite (non-infinity non-NaN). - */ -/*#define HAS_FINITE /**/ - -/* HAS_FINITEL: - * This symbol, if defined, indicates that the finitel routine is - * available to check whether a long double is finite - * (non-infinity non-NaN). - */ -/*#define HAS_FINITEL /**/ - -/* FLEXFILENAMES: - * This symbol, if defined, indicates that the system supports filenames - * longer than 14 characters. - */ -#define FLEXFILENAMES /**/ - -/* HAS_FP_CLASS: - * This symbol, if defined, indicates that the fp_class routine is - * available to classify doubles. Available for example in Digital UNIX. - * The returned values are defined in <math.h> and are: - * - * FP_SNAN Signaling NaN (Not-a-Number) - * FP_QNAN Quiet NaN (Not-a-Number) - * FP_POS_INF +infinity - * FP_NEG_INF -infinity - * FP_POS_NORM Positive normalized - * FP_NEG_NORM Negative normalized - * FP_POS_DENORM Positive denormalized - * FP_NEG_DENORM Negative denormalized - * FP_POS_ZERO +0.0 (positive zero) - * FP_NEG_ZERO -0.0 (negative zero) - */ -/*#define HAS_FP_CLASS /**/ - -/* HAS_FPCLASS: - * This symbol, if defined, indicates that the fpclass routine is - * available to classify doubles. Available for example in Solaris/SVR4. - * The returned values are defined in <ieeefp.h> and are: - * - * FP_SNAN signaling NaN - * FP_QNAN quiet NaN - * FP_NINF negative infinity - * FP_PINF positive infinity - * FP_NDENORM negative denormalized non-zero - * FP_PDENORM positive denormalized non-zero - * FP_NZERO negative zero - * FP_PZERO positive zero - * FP_NNORM negative normalized non-zero - * FP_PNORM positive normalized non-zero - */ -/*#define HAS_FPCLASS /**/ - -/* HAS_FPCLASSIFY: - * This symbol, if defined, indicates that the fpclassify routine is - * available to classify doubles. Available for example in HP-UX. - * The returned values are defined in <math.h> and are - * - * FP_NORMAL Normalized - * FP_ZERO Zero - * FP_INFINITE Infinity - * FP_SUBNORMAL Denormalized - * FP_NAN NaN - * - */ -/*#define HAS_FPCLASSIFY /**/ - -/* HAS_FPOS64_T: - * This symbol will be defined if the C compiler supports fpos64_t. - */ -/*#define HAS_FPOS64_T /**/ - -/* HAS_FREXPL: - * This symbol, if defined, indicates that the frexpl routine is - * available to break a long double floating-point number into - * a normalized fraction and an integral power of 2. - */ -/*#define HAS_FREXPL /**/ - -/* HAS_STRUCT_FS_DATA: - * This symbol, if defined, indicates that the struct fs_data - * to do statfs() is supported. - */ -/*#define HAS_STRUCT_FS_DATA /**/ - -/* HAS_FSEEKO: - * This symbol, if defined, indicates that the fseeko routine is - * available to fseek beyond 32 bits (useful for ILP32 hosts). - */ -/*#define HAS_FSEEKO /**/ - -/* HAS_FSTATFS: - * This symbol, if defined, indicates that the fstatfs routine is - * available to stat filesystems by file descriptors. - */ -/*#define HAS_FSTATFS /**/ - -/* HAS_FSYNC: - * This symbol, if defined, indicates that the fsync routine is - * available to write a file's modified data and attributes to - * permanent storage. - */ -/*#define HAS_FSYNC /**/ - -/* HAS_FTELLO: - * This symbol, if defined, indicates that the ftello routine is - * available to ftell beyond 32 bits (useful for ILP32 hosts). - */ -/*#define HAS_FTELLO /**/ - -/* HAS_FUTIMES: - * This symbol, if defined, indicates that the futimes routine is - * available to change file descriptor time stamps with struct timevals. - */ -/*#define HAS_FUTIMES /**/ - -/* Gconvert: - * This preprocessor macro is defined to convert a floating point - * number to a string without a trailing decimal point. This - * emulates the behavior of sprintf("%g"), but is sometimes much more - * efficient. If gconvert() is not available, but gcvt() drops the - * trailing decimal point, then gcvt() is used. If all else fails, - * a macro using sprintf("%g") is used. Arguments for the Gconvert - * macro are: value, number of digits, whether trailing zeros should - * be retained, and the output buffer. - * The usual values are: - * d_Gconvert='gconvert((x),(n),(t),(b))' - * d_Gconvert='gcvt((x),(n),(b))' - * d_Gconvert='sprintf((b),"%.*g",(n),(x))' - * The last two assume trailing zeros should not be kept. - */ -#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) - -/* HAS_GETCWD: - * This symbol, if defined, indicates that the getcwd routine is - * available to get the current working directory. - */ -#define HAS_GETCWD /**/ - -/* HAS_GETESPWNAM: - * This symbol, if defined, indicates that the getespwnam system call is - * available to retrieve enchanced (shadow) password entries by name. - */ -/*#define HAS_GETESPWNAM /**/ - -/* HAS_GETFSSTAT: - * This symbol, if defined, indicates that the getfsstat routine is - * available to stat filesystems in bulk. - */ -/*#define HAS_GETFSSTAT /**/ - -/* HAS_GETGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for sequential access of the group database. - */ -/*#define HAS_GETGRENT /**/ - -/* HAS_GETGRENT_R: - * This symbol, if defined, indicates that the getgrent_r routine - * is available to getgrent re-entrantly. - */ -/* GETGRENT_R_PROTO: - * This symbol encodes the prototype of getgrent_r. - * It is zero if d_getgrent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r - * is defined. - */ -/*#define HAS_GETGRENT_R /**/ -#define GETGRENT_R_PROTO 0 /**/ - -/* HAS_GETGRGID_R: - * This symbol, if defined, indicates that the getgrgid_r routine - * is available to getgrgid re-entrantly. - */ -/* GETGRGID_R_PROTO: - * This symbol encodes the prototype of getgrgid_r. - * It is zero if d_getgrgid_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r - * is defined. - */ -/*#define HAS_GETGRGID_R /**/ -#define GETGRGID_R_PROTO 0 /**/ - -/* HAS_GETGRNAM_R: - * This symbol, if defined, indicates that the getgrnam_r routine - * is available to getgrnam re-entrantly. - */ -/* GETGRNAM_R_PROTO: - * This symbol encodes the prototype of getgrnam_r. - * It is zero if d_getgrnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r - * is defined. - */ -/*#define HAS_GETGRNAM_R /**/ -#define GETGRNAM_R_PROTO 0 /**/ - -/* HAS_GETHOSTBYADDR: - * This symbol, if defined, indicates that the gethostbyaddr() routine is - * available to look up hosts by their IP addresses. - */ -#define HAS_GETHOSTBYADDR /**/ - -/* HAS_GETHOSTBYNAME: - * This symbol, if defined, indicates that the gethostbyname() routine is - * available to look up host names in some data base or other. - */ -#define HAS_GETHOSTBYNAME /**/ - -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent() routine is - * available to look up host names in some data base or another. - */ -/*#define HAS_GETHOSTENT /**/ - -/* HAS_GETHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * gethostname() routine to derive the host name. See also HAS_UNAME - * and PHOSTNAME. - */ -/* HAS_UNAME: - * This symbol, if defined, indicates that the C program may use the - * uname() routine to derive the host name. See also HAS_GETHOSTNAME - * and PHOSTNAME. - */ -/* PHOSTNAME: - * This symbol, if defined, indicates the command to feed to the - * popen() routine to derive the host name. See also HAS_GETHOSTNAME - * and HAS_UNAME. Note that the command uses a fully qualified path, - * so that it is safe even if used by a process with super-user - * privileges. - */ -/* HAS_PHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * contents of PHOSTNAME as a command to feed to the popen() routine - * to derive the host name. - */ -#define HAS_GETHOSTNAME /**/ -#define HAS_UNAME /**/ -/*#define HAS_PHOSTNAME /**/ -#ifdef HAS_PHOSTNAME -#define PHOSTNAME "" /* How to get the host name */ -#endif - -/* HAS_GETHOST_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for gethostent(), gethostbyname(), and - * gethostbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETHOST_PROTOS /**/ - -/* HAS_GETITIMER: - * This symbol, if defined, indicates that the getitimer routine is - * available to return interval timers. - */ -/*#define HAS_GETITIMER /**/ - -/* HAS_GETLOGIN_R: - * This symbol, if defined, indicates that the getlogin_r routine - * is available to getlogin re-entrantly. - */ -/* GETLOGIN_R_PROTO: - * This symbol encodes the prototype of getlogin_r. - * It is zero if d_getlogin_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r - * is defined. - */ -/*#define HAS_GETLOGIN_R /**/ -#define GETLOGIN_R_PROTO 0 /**/ - -/* HAS_GETMNT: - * This symbol, if defined, indicates that the getmnt routine is - * available to get filesystem mount info by filename. - */ -/*#define HAS_GETMNT /**/ - -/* HAS_GETMNTENT: - * This symbol, if defined, indicates that the getmntent routine is - * available to iterate through mounted file systems to get their info. - */ -/*#define HAS_GETMNTENT /**/ - -/* HAS_GETNETBYADDR: - * This symbol, if defined, indicates that the getnetbyaddr() routine is - * available to look up networks by their IP addresses. - */ -/*#define HAS_GETNETBYADDR /**/ - -/* HAS_GETNETBYNAME: - * This symbol, if defined, indicates that the getnetbyname() routine is - * available to look up networks by their names. - */ -/*#define HAS_GETNETBYNAME /**/ - -/* HAS_GETNETENT: - * This symbol, if defined, indicates that the getnetent() routine is - * available to look up network names in some data base or another. - */ -/*#define HAS_GETNETENT /**/ - -/* HAS_GETNET_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for getnetent(), getnetbyname(), and - * getnetbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETNET_PROTOS /**/ - -/* HAS_GETPAGESIZE: - * This symbol, if defined, indicates that the getpagesize system call - * is available to get system page size, which is the granularity of - * many memory management calls. - */ -/*#define HAS_GETPAGESIZE /**/ - -/* HAS_GETPROTOENT: - * This symbol, if defined, indicates that the getprotoent() routine is - * available to look up protocols in some data base or another. - */ -/*#define HAS_GETPROTOENT /**/ - -/* HAS_GETPGRP: - * This symbol, if defined, indicates that the getpgrp routine is - * available to get the current process group. - */ -/* USE_BSD_GETPGRP: - * This symbol, if defined, indicates that getpgrp needs one - * arguments whereas USG one needs none. - */ -/*#define HAS_GETPGRP /**/ -/*#define USE_BSD_GETPGRP /**/ - -/* HAS_GETPROTOBYNAME: - * This symbol, if defined, indicates that the getprotobyname() - * routine is available to look up protocols by their name. - */ -/* HAS_GETPROTOBYNUMBER: - * This symbol, if defined, indicates that the getprotobynumber() - * routine is available to look up protocols by their number. - */ -#define HAS_GETPROTOBYNAME /**/ -#define HAS_GETPROTOBYNUMBER /**/ - -/* HAS_GETPROTO_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for getprotoent(), getprotobyname(), and - * getprotobyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETPROTO_PROTOS /**/ - -/* HAS_GETPRPWNAM: - * This symbol, if defined, indicates that the getprpwnam system call is - * available to retrieve protected (shadow) password entries by name. - */ -/*#define HAS_GETPRPWNAM /**/ - -/* HAS_GETPWENT: - * This symbol, if defined, indicates that the getpwent routine is - * available for sequential access of the passwd database. - * If this is not available, the older getpw() function may be available. - */ -/*#define HAS_GETPWENT /**/ - -/* HAS_GETPWENT_R: - * This symbol, if defined, indicates that the getpwent_r routine - * is available to getpwent re-entrantly. - */ -/* GETPWENT_R_PROTO: - * This symbol encodes the prototype of getpwent_r. - * It is zero if d_getpwent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r - * is defined. - */ -/*#define HAS_GETPWENT_R /**/ -#define GETPWENT_R_PROTO 0 /**/ - -/* HAS_GETPWNAM_R: - * This symbol, if defined, indicates that the getpwnam_r routine - * is available to getpwnam re-entrantly. - */ -/* GETPWNAM_R_PROTO: - * This symbol encodes the prototype of getpwnam_r. - * It is zero if d_getpwnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r - * is defined. - */ -/*#define HAS_GETPWNAM_R /**/ -#define GETPWNAM_R_PROTO 0 /**/ - -/* HAS_GETPWUID_R: - * This symbol, if defined, indicates that the getpwuid_r routine - * is available to getpwuid re-entrantly. - */ -/* GETPWUID_R_PROTO: - * This symbol encodes the prototype of getpwuid_r. - * It is zero if d_getpwuid_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r - * is defined. - */ -/*#define HAS_GETPWUID_R /**/ -#define GETPWUID_R_PROTO 0 /**/ - -/* HAS_GETSERVENT: - * This symbol, if defined, indicates that the getservent() routine is - * available to look up network services in some data base or another. - */ -/*#define HAS_GETSERVENT /**/ - -/* HAS_GETSERV_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for getservent(), getservbyname(), and - * getservbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETSERV_PROTOS /**/ - -/* HAS_GETSPNAM: - * This symbol, if defined, indicates that the getspnam system call is - * available to retrieve SysV shadow password entries by name. - */ -/*#define HAS_GETSPNAM /**/ - -/* HAS_GETSPNAM_R: - * This symbol, if defined, indicates that the getspnam_r routine - * is available to getspnam re-entrantly. - */ -/* GETSPNAM_R_PROTO: - * This symbol encodes the prototype of getspnam_r. - * It is zero if d_getspnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r - * is defined. - */ -/*#define HAS_GETSPNAM_R /**/ -#define GETSPNAM_R_PROTO 0 /**/ - -/* HAS_GETSERVBYNAME: - * This symbol, if defined, indicates that the getservbyname() - * routine is available to look up services by their name. - */ -/* HAS_GETSERVBYPORT: - * This symbol, if defined, indicates that the getservbyport() - * routine is available to look up services by their port. - */ -#define HAS_GETSERVBYNAME /**/ -#define HAS_GETSERVBYPORT /**/ - -/* HAS_GMTIME_R: - * This symbol, if defined, indicates that the gmtime_r routine - * is available to gmtime re-entrantly. - */ -/* GMTIME_R_PROTO: - * This symbol encodes the prototype of gmtime_r. - * It is zero if d_gmtime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r - * is defined. - */ -/*#define HAS_GMTIME_R /**/ -#define GMTIME_R_PROTO 0 /**/ - -/* HAS_GNULIBC: - * This symbol, if defined, indicates to the C program that - * the GNU C library is being used. A better check is to use - * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc. - */ -/*#define HAS_GNULIBC /**/ -#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) -# define _GNU_SOURCE -#endif -/* HAS_HASMNTOPT: - * This symbol, if defined, indicates that the hasmntopt routine is - * available to query the mount options of file systems. - */ -/*#define HAS_HASMNTOPT /**/ - -/* HAS_HTONL: - * This symbol, if defined, indicates that the htonl() routine (and - * friends htons() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_HTONS: - * This symbol, if defined, indicates that the htons() routine (and - * friends htonl() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHL: - * This symbol, if defined, indicates that the ntohl() routine (and - * friends htonl() htons() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHS: - * This symbol, if defined, indicates that the ntohs() routine (and - * friends htonl() htons() ntohl()) are available to do network - * order byte swapping. - */ -#define HAS_HTONL /**/ -#define HAS_HTONS /**/ -#define HAS_NTOHL /**/ -#define HAS_NTOHS /**/ - -/* HAS_INT64_T: - * This symbol will defined if the C compiler supports int64_t. - * Usually the <inttypes.h> needs to be included, but sometimes - * <sys/types.h> is enough. - */ -/*#define HAS_INT64_T /**/ - -/* HAS_ISASCII: - * This manifest constant lets the C program know that isascii - * is available. - */ -#define HAS_ISASCII /**/ - -/* HAS_ISFINITE: - * This symbol, if defined, indicates that the isfinite routine is - * available to check whether a double is finite (non-infinity non-NaN). - */ -/*#define HAS_ISFINITE /**/ - -/* HAS_ISINF: - * This symbol, if defined, indicates that the isinf routine is - * available to check whether a double is an infinity. - */ -/*#define HAS_ISINF /**/ - -/* HAS_ISNAN: - * This symbol, if defined, indicates that the isnan routine is - * available to check whether a double is a NaN. - */ -#define HAS_ISNAN /**/ - -/* HAS_ISNANL: - * This symbol, if defined, indicates that the isnanl routine is - * available to check whether a long double is a NaN. - */ -/*#define HAS_ISNANL /**/ - -/* HAS_LCHOWN: - * This symbol, if defined, indicates that the lchown routine is - * available to operate on a symbolic link (instead of following the - * link). - */ -/*#define HAS_LCHOWN /**/ - -/* HAS_LDBL_DIG: - * This symbol, if defined, indicates that this system's <float.h> - * or <limits.h> defines the symbol LDBL_DIG, which is the number - * of significant digits in a long double precision number. Unlike - * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined. - */ -#define HAS_LDBL_DIG /**/ - -/* HAS_LOCALTIME_R: - * This symbol, if defined, indicates that the localtime_r routine - * is available to localtime re-entrantly. - */ -/* LOCALTIME_R_PROTO: - * This symbol encodes the prototype of localtime_r. - * It is zero if d_localtime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r - * is defined. - */ -/*#define HAS_LOCALTIME_R /**/ -#define LOCALTIME_R_PROTO 0 /**/ - -/* HAS_LONG_DOUBLE: - * This symbol will be defined if the C compiler supports long - * doubles. - */ -/* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -/*#define HAS_LONG_DOUBLE /**/ -#ifdef HAS_LONG_DOUBLE -#define LONG_DOUBLESIZE 10 /**/ -#endif - -/* HAS_LONG_LONG: - * This symbol will be defined if the C compiler supports long long. - */ -/* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long long. - */ -/*#define HAS_LONG_LONG /**/ -#ifdef HAS_LONG_LONG -#define LONGLONGSIZE 8 /**/ -#endif - -/* HAS_LSEEK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the lseek() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern off_t lseek(int, off_t, int); - */ -#define HAS_LSEEK_PROTO /**/ - -/* HAS_MADVISE: - * This symbol, if defined, indicates that the madvise system call is - * available to map a file into memory. - */ -/*#define HAS_MADVISE /**/ - -/* HAS_MALLOC_SIZE: - * This symbol, if defined, indicates that the malloc_size - * routine is available for use. - */ -/*#define HAS_MALLOC_SIZE /**/ - -/* HAS_MALLOC_GOOD_SIZE: - * This symbol, if defined, indicates that the malloc_good_size - * routine is available for use. - */ -/*#define HAS_MALLOC_GOOD_SIZE /**/ - -/* HAS_MEMCHR: - * This symbol, if defined, indicates that the memchr routine is available - * to locate characters within a C string. - */ -#define HAS_MEMCHR /**/ - -/* HAS_MKDTEMP: - * This symbol, if defined, indicates that the mkdtemp routine is - * available to exclusively create a uniquely named temporary directory. - */ -/*#define HAS_MKDTEMP /**/ - -/* HAS_MKSTEMP: - * This symbol, if defined, indicates that the mkstemp routine is - * available to exclusively create and open a uniquely named - * temporary file. - */ -/*#define HAS_MKSTEMP /**/ - -/* HAS_MKSTEMPS: - * This symbol, if defined, indicates that the mkstemps routine is - * available to excluslvely create and open a uniquely named - * (with a suffix) temporary file. - */ -/*#define HAS_MKSTEMPS /**/ - -/* HAS_MMAP: - * This symbol, if defined, indicates that the mmap system call is - * available to map a file into memory. - */ -/* Mmap_t: - * This symbol holds the return type of the mmap() system call - * (and simultaneously the type of the first argument). - * Usually set to 'void *' or 'cadd_t'. - */ -/*#define HAS_MMAP /**/ -#define Mmap_t void * /**/ - -/* HAS_MODFL: - * This symbol, if defined, indicates that the modfl routine is - * available to split a long double x into a fractional part f and - * an integer part i such that |f| < 1.0 and (f + i) = x. - */ -/* HAS_MODFL_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the modfl() function. Otherwise, it is up - * to the program to supply one. - */ -/* HAS_MODFL_POW32_BUG: - * This symbol, if defined, indicates that the modfl routine is - * broken for long doubles >= pow(2, 32). - * For example from 4294967303.150000 one would get 4294967302.000000 - * and 1.150000. The bug has been seen in certain versions of glibc, - * release 2.2.2 is known to be okay. - */ -/*#define HAS_MODFL /**/ -/*#define HAS_MODFL_PROTO /**/ -/*#define HAS_MODFL_POW32_BUG /**/ - -/* HAS_MPROTECT: - * This symbol, if defined, indicates that the mprotect system call is - * available to modify the access protection of a memory mapped file. - */ -/*#define HAS_MPROTECT /**/ - -/* HAS_MSG: - * This symbol, if defined, indicates that the entire msg*(2) library is - * supported (IPC mechanism based on message queues). - */ -/*#define HAS_MSG /**/ - -/* HAS_STRUCT_MSGHDR: - * This symbol, if defined, indicates that the struct msghdr - * is supported. - */ -/*#define HAS_STRUCT_MSGHDR /**/ - -/* HAS_OFF64_T: - * This symbol will be defined if the C compiler supports off64_t. - */ -/*#define HAS_OFF64_T /**/ - -/* HAS_OPEN3: - * This manifest constant lets the C program know that the three - * argument form of open(2) is available. - */ -/*#define HAS_OPEN3 /**/ - -/* OLD_PTHREAD_CREATE_JOINABLE: - * This symbol, if defined, indicates how to create pthread - * in joinable (aka undetached) state. NOTE: not defined - * if pthread.h already has defined PTHREAD_CREATE_JOINABLE - * (the new version of the constant). - * If defined, known values are PTHREAD_CREATE_UNDETACHED - * and __UNDETACHED. - */ -/*#define OLD_PTHREAD_CREATE_JOINABLE /**/ - -/* HAS_PTHREAD_YIELD: - * This symbol, if defined, indicates that the pthread_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/* SCHED_YIELD: - * This symbol defines the way to yield the execution of - * the current thread. Known ways are sched_yield, - * pthread_yield, and pthread_yield with NULL. - */ -/* HAS_SCHED_YIELD: - * This symbol, if defined, indicates that the sched_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/*#define HAS_PTHREAD_YIELD /**/ -#define SCHED_YIELD /**/ -/*#define HAS_SCHED_YIELD /**/ - -/* HAS_RANDOM_R: - * This symbol, if defined, indicates that the random_r routine - * is available to random re-entrantly. - */ -/* RANDOM_R_PROTO: - * This symbol encodes the prototype of random_r. - * It is zero if d_random_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r - * is defined. - */ -/*#define HAS_RANDOM_R /**/ -#define RANDOM_R_PROTO 0 /**/ - -/* HAS_READDIR_R: - * This symbol, if defined, indicates that the readdir_r routine - * is available to readdir re-entrantly. - */ -/* READDIR_R_PROTO: - * This symbol encodes the prototype of readdir_r. - * It is zero if d_readdir_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r - * is defined. - */ -/*#define HAS_READDIR_R /**/ -#define READDIR_R_PROTO 0 /**/ - -/* HAS_READV: - * This symbol, if defined, indicates that the readv routine is - * available to do gather reads. You will also need <sys/uio.h> - * and there I_SYSUIO. - */ -/*#define HAS_READV /**/ - -/* HAS_RECVMSG: - * This symbol, if defined, indicates that the recvmsg routine is - * available to send structured socket messages. - */ -/*#define HAS_RECVMSG /**/ - -/* HAS_SAFE_BCOPY: - * This symbol, if defined, indicates that the bcopy routine is available - * to copy potentially overlapping memory blocks. Normally, you should - * probably use memmove() or memcpy(). If neither is defined, roll your - * own version. - */ -/*#define HAS_SAFE_BCOPY /**/ - -/* HAS_SAFE_MEMCPY: - * This symbol, if defined, indicates that the memcpy routine is available - * to copy potentially overlapping memory blocks. If you need to - * copy overlapping memory blocks, you should check HAS_MEMMOVE and - * use memmove() instead, if available. - */ -/*#define HAS_SAFE_MEMCPY /**/ - -/* HAS_SANE_MEMCMP: - * This symbol, if defined, indicates that the memcmp routine is available - * and can be used to compare relative magnitudes of chars with their high - * bits set. If it is not defined, roll your own version. - */ -#define HAS_SANE_MEMCMP /**/ - -/* HAS_SBRK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the sbrk() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern void* sbrk(int); - * extern void* sbrk(size_t); - */ -/*#define HAS_SBRK_PROTO /**/ - -/* HAS_SEM: - * This symbol, if defined, indicates that the entire sem*(2) library is - * supported. - */ -/*#define HAS_SEM /**/ - -/* HAS_SENDMSG: - * This symbol, if defined, indicates that the sendmsg routine is - * available to send structured socket messages. - */ -/*#define HAS_SENDMSG /**/ - -/* HAS_SETGRENT: - * This symbol, if defined, indicates that the setgrent routine is - * available for initializing sequential access of the group database. - */ -/*#define HAS_SETGRENT /**/ - -/* HAS_SETGRENT_R: - * This symbol, if defined, indicates that the setgrent_r routine - * is available to setgrent re-entrantly. - */ -/* SETGRENT_R_PROTO: - * This symbol encodes the prototype of setgrent_r. - * It is zero if d_setgrent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r - * is defined. - */ -/*#define HAS_SETGRENT_R /**/ -#define SETGRENT_R_PROTO 0 /**/ - -/* HAS_SETGROUPS: - * This symbol, if defined, indicates that the setgroups() routine is - * available to set the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -/*#define HAS_SETGROUPS /**/ - -/* HAS_SETHOSTENT: - * This symbol, if defined, indicates that the sethostent() routine is - * available. - */ -/*#define HAS_SETHOSTENT /**/ - -/* HAS_SETITIMER: - * This symbol, if defined, indicates that the setitimer routine is - * available to set interval timers. - */ -/*#define HAS_SETITIMER /**/ - -/* HAS_SETNETENT: - * This symbol, if defined, indicates that the setnetent() routine is - * available. - */ -/*#define HAS_SETNETENT /**/ - -/* HAS_SETPROTOENT: - * This symbol, if defined, indicates that the setprotoent() routine is - * available. - */ -/*#define HAS_SETPROTOENT /**/ - -/* HAS_SETPGRP: - * This symbol, if defined, indicates that the setpgrp routine is - * available to set the current process group. - */ -/* USE_BSD_SETPGRP: - * This symbol, if defined, indicates that setpgrp needs two - * arguments whereas USG one needs none. See also HAS_SETPGID - * for a POSIX interface. - */ -/*#define HAS_SETPGRP /**/ -/*#define USE_BSD_SETPGRP /**/ - -/* HAS_SETPROCTITLE: - * This symbol, if defined, indicates that the setproctitle routine is - * available to set process title. - */ -/*#define HAS_SETPROCTITLE /**/ - -/* HAS_SETPWENT: - * This symbol, if defined, indicates that the setpwent routine is - * available for initializing sequential access of the passwd database. - */ -/*#define HAS_SETPWENT /**/ - -/* HAS_SETPWENT_R: - * This symbol, if defined, indicates that the setpwent_r routine - * is available to setpwent re-entrantly. - */ -/* SETPWENT_R_PROTO: - * This symbol encodes the prototype of setpwent_r. - * It is zero if d_setpwent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r - * is defined. - */ -/*#define HAS_SETPWENT_R /**/ -#define SETPWENT_R_PROTO 0 /**/ - -/* HAS_SETSERVENT: - * This symbol, if defined, indicates that the setservent() routine is - * available. - */ -/*#define HAS_SETSERVENT /**/ - -/* HAS_SETVBUF: - * This symbol, if defined, indicates that the setvbuf routine is - * available to change buffering on an open stdio stream. - * to a line-buffered mode. - */ -/*#define HAS_SETVBUF /**/ - -/* USE_SFIO: - * This symbol, if defined, indicates that sfio should - * be used. - */ -/*#define USE_SFIO /**/ - -/* HAS_SHM: - * This symbol, if defined, indicates that the entire shm*(2) library is - * supported. - */ -/*#define HAS_SHM /**/ - -/* HAS_SIGACTION: - * This symbol, if defined, indicates that Vr4's sigaction() routine - * is available. - */ -/*#define HAS_SIGACTION /**/ - -/* HAS_SIGSETJMP: - * This variable indicates to the C program that the sigsetjmp() - * routine is available to save the calling process's registers - * and stack environment for later use by siglongjmp(), and - * to optionally save the process's signal mask. See - * Sigjmp_buf, Sigsetjmp, and Siglongjmp. - */ -/* Sigjmp_buf: - * This is the buffer type to be used with Sigsetjmp and Siglongjmp. - */ -/* Sigsetjmp: - * This macro is used in the same way as sigsetjmp(), but will invoke - * traditional setjmp() if sigsetjmp isn't available. - * See HAS_SIGSETJMP. - */ -/* Siglongjmp: - * This macro is used in the same way as siglongjmp(), but will invoke - * traditional longjmp() if siglongjmp isn't available. - * See HAS_SIGSETJMP. - */ -/*#define HAS_SIGSETJMP /**/ -#ifdef HAS_SIGSETJMP -#define Sigjmp_buf sigjmp_buf -#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) -#define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) -#else -#define Sigjmp_buf jmp_buf -#define Sigsetjmp(buf,save_mask) setjmp((buf)) -#define Siglongjmp(buf,retval) longjmp((buf),(retval)) -#endif - -/* USE_SITECUSTOMIZE: - * This symbol, if defined, indicates that sitecustomize should - * be used. - */ -/*#define USE_SITECUSTOMIZE /**/ - -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. - */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair() call is - * supported. - */ -/* HAS_MSG_CTRUNC: - * This symbol, if defined, indicates that the MSG_CTRUNC is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_DONTROUTE: - * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_OOB: - * This symbol, if defined, indicates that the MSG_OOB is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PEEK: - * This symbol, if defined, indicates that the MSG_PEEK is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PROXY: - * This symbol, if defined, indicates that the MSG_PROXY is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SCM_RIGHTS: - * This symbol, if defined, indicates that the SCM_RIGHTS is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -#define HAS_SOCKET /**/ -/*#define HAS_SOCKETPAIR /**/ -/*#define HAS_MSG_CTRUNC /**/ -/*#define HAS_MSG_DONTROUTE /**/ -/*#define HAS_MSG_OOB /**/ -/*#define HAS_MSG_PEEK /**/ -/*#define HAS_MSG_PROXY /**/ -/*#define HAS_SCM_RIGHTS /**/ - -/* HAS_SOCKS5_INIT: - * This symbol, if defined, indicates that the socks5_init routine is - * available to initialize SOCKS 5. - */ -/*#define HAS_SOCKS5_INIT /**/ - -/* HAS_SQRTL: - * This symbol, if defined, indicates that the sqrtl routine is - * available to do long double square roots. - */ -/*#define HAS_SQRTL /**/ - -/* HAS_SRAND48_R: - * This symbol, if defined, indicates that the srand48_r routine - * is available to srand48 re-entrantly. - */ -/* SRAND48_R_PROTO: - * This symbol encodes the prototype of srand48_r. - * It is zero if d_srand48_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r - * is defined. - */ -/*#define HAS_SRAND48_R /**/ -#define SRAND48_R_PROTO 0 /**/ - -/* HAS_SRANDOM_R: - * This symbol, if defined, indicates that the srandom_r routine - * is available to srandom re-entrantly. - */ -/* SRANDOM_R_PROTO: - * This symbol encodes the prototype of srandom_r. - * It is zero if d_srandom_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r - * is defined. - */ -/*#define HAS_SRANDOM_R /**/ -#define SRANDOM_R_PROTO 0 /**/ - -/* USE_STAT_BLOCKS: - * This symbol is defined if this system has a stat structure declaring - * st_blksize and st_blocks. - */ -#ifndef USE_STAT_BLOCKS -/*#define USE_STAT_BLOCKS /**/ -#endif - -/* HAS_STRUCT_STATFS_F_FLAGS: - * This symbol, if defined, indicates that the struct statfs - * does have the f_flags member containing the mount flags of - * the filesystem containing the file. - * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3), - * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not - * have statfs() and struct statfs, they have ustat() and getmnt() - * with struct ustat and struct fs_data. - */ -/*#define HAS_STRUCT_STATFS_F_FLAGS /**/ - -/* HAS_STRUCT_STATFS: - * This symbol, if defined, indicates that the struct statfs - * to do statfs() is supported. - */ -/*#define HAS_STRUCT_STATFS /**/ - -/* HAS_FSTATVFS: - * This symbol, if defined, indicates that the fstatvfs routine is - * available to stat filesystems by file descriptors. - */ -/*#define HAS_FSTATVFS /**/ - -/* USE_STDIO_PTR: - * This symbol is defined if the _ptr and _cnt fields (or similar) - * of the stdio FILE structure can be used to access the stdio buffer - * for a file handle. If this is defined, then the FILE_ptr(fp) - * and FILE_cnt(fp) macros will also be defined and should be used - * to access these fields. - */ -/* FILE_ptr: - * This macro is used to access the _ptr field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_PTR_LVALUE: - * This symbol is defined if the FILE_ptr macro can be used as an - * lvalue. - */ -/* FILE_cnt: - * This macro is used to access the _cnt field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_CNT_LVALUE: - * This symbol is defined if the FILE_cnt macro can be used as an - * lvalue. - */ -/* STDIO_PTR_LVAL_SETS_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n has the side effect of decreasing the - * value of File_cnt(fp) by n. - */ -/* STDIO_PTR_LVAL_NOCHANGE_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n leaves File_cnt(fp) unchanged. - */ -/*#define USE_STDIO_PTR /**/ -#ifdef USE_STDIO_PTR -#define FILE_ptr(fp) -/*#define STDIO_PTR_LVALUE /**/ -#define FILE_cnt(fp) -/*#define STDIO_CNT_LVALUE /**/ -/*#define STDIO_PTR_LVAL_SETS_CNT /**/ -/*#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/ -#endif - -/* USE_STDIO_BASE: - * This symbol is defined if the _base field (or similar) of the - * stdio FILE structure can be used to access the stdio buffer for - * a file handle. If this is defined, then the FILE_base(fp) macro - * will also be defined and should be used to access this field. - * Also, the FILE_bufsiz(fp) macro will be defined and should be used - * to determine the number of bytes in the buffer. USE_STDIO_BASE - * will never be defined unless USE_STDIO_PTR is. - */ -/* FILE_base: - * This macro is used to access the _base field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_BASE is defined. - */ -/* FILE_bufsiz: - * This macro is used to determine the number of bytes in the I/O - * buffer pointed to by _base field (or equivalent) of the FILE - * structure pointed to its argument. This macro will always be defined - * if USE_STDIO_BASE is defined. - */ -/*#define USE_STDIO_BASE /**/ -#ifdef USE_STDIO_BASE -#define FILE_base(fp) -#define FILE_bufsiz(fp) -#endif - -/* HAS_STRERROR: - * This symbol, if defined, indicates that the strerror routine is - * available to translate error numbers to strings. See the writeup - * of Strerror() in this file before you try to define your own. - */ -/* HAS_SYS_ERRLIST: - * This symbol, if defined, indicates that the sys_errlist array is - * available to translate error numbers to strings. The extern int - * sys_nerr gives the size of that table. - */ -/* Strerror: - * This preprocessor symbol is defined as a macro if strerror() is - * not available to translate error numbers to strings but sys_errlist[] - * array is there. - */ -#define HAS_STRERROR /**/ -#define HAS_SYS_ERRLIST /**/ -#define Strerror(e) strerror(e) - -/* HAS_STRERROR_R: - * This symbol, if defined, indicates that the strerror_r routine - * is available to strerror re-entrantly. - */ -/* STRERROR_R_PROTO: - * This symbol encodes the prototype of strerror_r. - * It is zero if d_strerror_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r - * is defined. - */ -/*#define HAS_STRERROR_R /**/ -#define STRERROR_R_PROTO 0 /**/ - -/* HAS_STRTOLD: - * This symbol, if defined, indicates that the strtold routine is - * available to convert strings to long doubles. - */ -/*#define HAS_STRTOLD /**/ - -/* HAS_STRTOLL: - * This symbol, if defined, indicates that the strtoll routine is - * available to convert strings to long longs. - */ -/*#define HAS_STRTOLL /**/ - -/* HAS_STRTOQ: - * This symbol, if defined, indicates that the strtoq routine is - * available to convert strings to long longs (quads). - */ -/*#define HAS_STRTOQ /**/ - -/* HAS_STRTOUL: - * This symbol, if defined, indicates that the strtoul routine is - * available to provide conversion of strings to unsigned long. - */ -#define HAS_STRTOUL /**/ - -/* HAS_STRTOULL: - * This symbol, if defined, indicates that the strtoull routine is - * available to convert strings to unsigned long longs. - */ -/*#define HAS_STRTOULL /**/ - -/* HAS_STRTOUQ: - * This symbol, if defined, indicates that the strtouq routine is - * available to convert strings to unsigned long longs (quads). - */ -/*#define HAS_STRTOUQ /**/ - -/* HAS_TELLDIR_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the telldir() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern long telldir(DIR*); - */ -#define HAS_TELLDIR_PROTO /**/ - -/* HAS_TIME: - * This symbol, if defined, indicates that the time() routine exists. - */ -/* Time_t: - * This symbol holds the type returned by time(). It can be long, - * or time_t on BSD sites (in which case <sys/types.h> should be - * included). - */ -#define HAS_TIME /**/ -#define Time_t time_t /* Time type */ - -/* HAS_TIMES: - * This symbol, if defined, indicates that the times() routine exists. - * Note that this became obsolete on some systems (SUNOS), which now - * use getrusage(). It may be necessary to include <sys/times.h>. - */ -#define HAS_TIMES /**/ - -/* HAS_TMPNAM_R: - * This symbol, if defined, indicates that the tmpnam_r routine - * is available to tmpnam re-entrantly. - */ -/* TMPNAM_R_PROTO: - * This symbol encodes the prototype of tmpnam_r. - * It is zero if d_tmpnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r - * is defined. - */ -/*#define HAS_TMPNAM_R /**/ -#define TMPNAM_R_PROTO 0 /**/ - -/* HAS_UALARM: - * This symbol, if defined, indicates that the ualarm routine is - * available to do alarms with microsecond granularity. - */ -/*#define HAS_UALARM /**/ - -/* HAS_UNION_SEMUN: - * This symbol, if defined, indicates that the union semun is - * defined by including <sys/sem.h>. If not, the user code - * probably needs to define it as: - * union semun { - * int val; - * struct semid_ds *buf; - * unsigned short *array; - * } - */ -/* USE_SEMCTL_SEMUN: - * This symbol, if defined, indicates that union semun is - * used for semctl IPC_STAT. - */ -/* USE_SEMCTL_SEMID_DS: - * This symbol, if defined, indicates that struct semid_ds * is - * used for semctl IPC_STAT. - */ -#define HAS_UNION_SEMUN /**/ -/*#define USE_SEMCTL_SEMUN /**/ -/*#define USE_SEMCTL_SEMID_DS /**/ - -/* HAS_UNORDERED: - * This symbol, if defined, indicates that the unordered routine is - * available to check whether two doubles are unordered - * (effectively: whether either of them is NaN) - */ -/*#define HAS_UNORDERED /**/ - -/* HAS_UNSETENV: - * This symbol, if defined, indicates that the unsetenv () routine is - * available for use. - */ -/*#define HAS_UNSETENV /**/ - -/* HAS_USTAT: - * This symbol, if defined, indicates that the ustat system call is - * available to query file system statistics by dev_t. - */ -/*#define HAS_USTAT /**/ - -/* HAS_VFORK: - * This symbol, if defined, indicates that vfork() exists. - */ -/*#define HAS_VFORK /**/ - -/* Signal_t: - * This symbol's value is either "void" or "int", corresponding to the - * appropriate return type of a signal handler. Thus, you can declare - * a signal handler using "Signal_t (*handler)()", and define the - * handler using "Signal_t handler(sig)". - */ -#define Signal_t void /* Signal handler's return type */ - -/* HAS_VPRINTF: - * This symbol, if defined, indicates that the vprintf routine is available - * to printf with a pointer to an argument list. If unavailable, you - * may need to write your own, probably in terms of _doprnt(). - */ -/* USE_CHAR_VSPRINTF: - * This symbol is defined if this system has vsprintf() returning type - * (char*). The trend seems to be to declare it as "int vsprintf()". It - * is up to the package author to declare vsprintf correctly based on the - * symbol. - */ -#define HAS_VPRINTF /**/ -/*#define USE_CHAR_VSPRINTF /**/ - -/* HAS_WRITEV: - * This symbol, if defined, indicates that the writev routine is - * available to do scatter writes. - */ -/*#define HAS_WRITEV /**/ - -/* USE_DYNAMIC_LOADING: - * This symbol, if defined, indicates that dynamic loading of - * some sort is available. - */ -#define USE_DYNAMIC_LOADING /**/ - -/* DOUBLESIZE: - * This symbol contains the size of a double, so that the C preprocessor - * can make decisions based on it. - */ -#define DOUBLESIZE 8 /**/ - -/* EBCDIC: - * This symbol, if defined, indicates that this system uses - * EBCDIC encoding. - */ -/*#define EBCDIC /**/ - -/* FFLUSH_NULL: - * This symbol, if defined, tells that fflush(NULL) does flush - * all pending stdio output. - */ -/* FFLUSH_ALL: - * This symbol, if defined, tells that to flush - * all pending stdio output one must loop through all - * the stdio file handles stored in an array and fflush them. - * Note that if fflushNULL is defined, fflushall will not - * even be probed for and will be left undefined. - */ -#define FFLUSH_NULL /**/ -/*#define FFLUSH_ALL /**/ - -/* Fpos_t: - * This symbol holds the type used to declare file positions in libc. - * It can be fpos_t, long, uint, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Fpos_t fpos_t /* File position type */ - -/* Gid_t_f: - * This symbol defines the format string used for printing a Gid_t. - */ -#define Gid_t_f "ld" /**/ - -/* Gid_t_sign: - * This symbol holds the signedess of a Gid_t. - * 1 for unsigned, -1 for signed. - */ -#define Gid_t_sign -1 /* GID sign */ - -/* Gid_t_size: - * This symbol holds the size of a Gid_t in bytes. - */ -#define Gid_t_size 4 /* GID size */ - -/* Gid_t: - * This symbol holds the return type of getgid() and the type of - * argument to setrgid() and related functions. Typically, - * it is the type of group ids in the kernel. It can be int, ushort, - * gid_t, etc... It may be necessary to include <sys/types.h> to get - * any typedef'ed information. - */ -#define Gid_t gid_t /* Type for getgid(), etc... */ - -/* Groups_t: - * This symbol holds the type used for the second argument to - * getgroups() and setgroups(). Usually, this is the same as - * gidtype (gid_t) , but sometimes it isn't. - * It can be int, ushort, gid_t, etc... - * It may be necessary to include <sys/types.h> to get any - * typedef'ed information. This is only required if you have - * getgroups() or setgroups().. - */ -#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) -#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */ -#endif - -/* DB_Prefix_t: - * This symbol contains the type of the prefix structure element - * in the <db.h> header file. In older versions of DB, it was - * int, while in newer ones it is u_int32_t. - */ -/* DB_Hash_t: - * This symbol contains the type of the prefix structure element - * in the <db.h> header file. In older versions of DB, it was - * int, while in newer ones it is size_t. - */ -/* DB_VERSION_MAJOR_CFG: - * This symbol, if defined, defines the major version number of - * Berkeley DB found in the <db.h> header when Perl was configured. - */ -/* DB_VERSION_MINOR_CFG: - * This symbol, if defined, defines the minor version number of - * Berkeley DB found in the <db.h> header when Perl was configured. - * For DB version 1 this is always 0. - */ -/* DB_VERSION_PATCH_CFG: - * This symbol, if defined, defines the patch version number of - * Berkeley DB found in the <db.h> header when Perl was configured. - * For DB version 1 this is always 0. - */ -#define DB_Hash_t int /**/ -#define DB_Prefix_t int /**/ -#define DB_VERSION_MAJOR_CFG undef /**/ -#define DB_VERSION_MINOR_CFG undef /**/ -#define DB_VERSION_PATCH_CFG undef /**/ - -/* I_FP_CLASS: - * This symbol, if defined, indicates that <fp_class.h> exists and - * should be included. - */ -/*#define I_FP_CLASS /**/ - -/* I_GRP: - * This symbol, if defined, indicates to the C program that it should - * include <grp.h>. - */ -/* GRPASSWD: - * This symbol, if defined, indicates to the C program that struct group - * in <grp.h> contains gr_passwd. - */ -/*#define I_GRP /**/ -/*#define GRPASSWD /**/ - -/* I_IEEEFP: - * This symbol, if defined, indicates that <ieeefp.h> exists and - * should be included. - */ -/*#define I_IEEEFP /**/ - -/* I_INTTYPES: - * This symbol, if defined, indicates to the C program that it should - * include <inttypes.h>. - */ -/*#define I_INTTYPES /**/ - -/* I_LIBUTIL: - * This symbol, if defined, indicates that <libutil.h> exists and - * should be included. - */ -/*#define I_LIBUTIL /**/ - -/* I_MACH_CTHREADS: - * This symbol, if defined, indicates to the C program that it should - * include <mach/cthreads.h>. - */ -/*#define I_MACH_CTHREADS /**/ - -/* I_MNTENT: - * This symbol, if defined, indicates that <mntent.h> exists and - * should be included. - */ -/*#define I_MNTENT /**/ - -/* I_NETDB: - * This symbol, if defined, indicates that <netdb.h> exists and - * should be included. - */ -/*#define I_NETDB /**/ - -/* I_NETINET_TCP: - * This symbol, if defined, indicates to the C program that it should - * include <netinet/tcp.h>. - */ -/*#define I_NETINET_TCP /**/ - -/* I_POLL: - * This symbol, if defined, indicates that <poll.h> exists and - * should be included. - */ -/*#define I_POLL /**/ - -/* I_PROT: - * This symbol, if defined, indicates that <prot.h> exists and - * should be included. - */ -/*#define I_PROT /**/ - -/* I_PTHREAD: - * This symbol, if defined, indicates to the C program that it should - * include <pthread.h>. - */ -/*#define I_PTHREAD /**/ - -/* I_PWD: - * This symbol, if defined, indicates to the C program that it should - * include <pwd.h>. - */ -/* PWQUOTA: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_quota. - */ -/* PWAGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_age. - */ -/* PWCHANGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_change. - */ -/* PWCLASS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_class. - */ -/* PWEXPIRE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_expire. - */ -/* PWCOMMENT: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_comment. - */ -/* PWGECOS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_gecos. - */ -/* PWPASSWD: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_passwd. - */ -/*#define I_PWD /**/ -/*#define PWQUOTA /**/ -/*#define PWAGE /**/ -/*#define PWCHANGE /**/ -/*#define PWCLASS /**/ -/*#define PWEXPIRE /**/ -/*#define PWCOMMENT /**/ -/*#define PWGECOS /**/ -/*#define PWPASSWD /**/ - -/* I_SHADOW: - * This symbol, if defined, indicates that <shadow.h> exists and - * should be included. - */ -/*#define I_SHADOW /**/ - -/* I_SOCKS: - * This symbol, if defined, indicates that <socks.h> exists and - * should be included. - */ -/*#define I_SOCKS /**/ - -/* I_SUNMATH: - * This symbol, if defined, indicates that <sunmath.h> exists and - * should be included. - */ -/*#define I_SUNMATH /**/ - -/* I_SYSLOG: - * This symbol, if defined, indicates that <syslog.h> exists and - * should be included. - */ -/*#define I_SYSLOG /**/ - -/* I_SYSMODE: - * This symbol, if defined, indicates that <sys/mode.h> exists and - * should be included. - */ -/*#define I_SYSMODE /**/ - -/* I_SYS_MOUNT: - * This symbol, if defined, indicates that <sys/mount.h> exists and - * should be included. - */ -/*#define I_SYS_MOUNT /**/ - -/* I_SYS_STATFS: - * This symbol, if defined, indicates that <sys/statfs.h> exists. - */ -/*#define I_SYS_STATFS /**/ - -/* I_SYS_STATVFS: - * This symbol, if defined, indicates that <sys/statvfs.h> exists and - * should be included. - */ -/*#define I_SYS_STATVFS /**/ - -/* I_SYSUIO: - * This symbol, if defined, indicates that <sys/uio.h> exists and - * should be included. - */ -/*#define I_SYSUIO /**/ - -/* I_SYSUTSNAME: - * This symbol, if defined, indicates that <sys/utsname.h> exists and - * should be included. - */ -/*#define I_SYSUTSNAME /**/ - -/* I_SYS_VFS: - * This symbol, if defined, indicates that <sys/vfs.h> exists and - * should be included. - */ -/*#define I_SYS_VFS /**/ - -/* I_TIME: - * This symbol, if defined, indicates to the C program that it should - * include <time.h>. - */ -/* I_SYS_TIME: - * This symbol, if defined, indicates to the C program that it should - * include <sys/time.h>. - */ -/* I_SYS_TIME_KERNEL: - * This symbol, if defined, indicates to the C program that it should - * include <sys/time.h> with KERNEL defined. - */ -/* HAS_TM_TM_ZONE: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_zone field. - */ -/* HAS_TM_TM_GMTOFF: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_gmtoff field. - */ -/*#define I_TIME /**/ -/*#define I_SYS_TIME /**/ -/*#define I_SYS_TIME_KERNEL /**/ -/*#define HAS_TM_TM_ZONE /**/ -/*#define HAS_TM_TM_GMTOFF /**/ - -/* I_USTAT: - * This symbol, if defined, indicates that <ustat.h> exists and - * should be included. - */ -/*#define I_USTAT /**/ - -/* PERL_INC_VERSION_LIST: - * This variable specifies the list of subdirectories in over - * which perl.c:incpush() and lib/lib.pm will automatically - * search when adding directories to @INC, in a format suitable - * for a C initialization string. See the inc_version_list entry - * in Porting/Glossary for more details. - */ -#define PERL_INC_VERSION_LIST 0 /**/ - -/* INSTALL_USR_BIN_PERL: - * This symbol, if defined, indicates that Perl is to be installed - * also as /usr/bin/perl. - */ -/*#define INSTALL_USR_BIN_PERL /**/ - -/* PERL_PRIfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for output. - */ -/* PERL_PRIgldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'g') for output. - */ -/* PERL_PRIeldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'e') for output. - */ -/* PERL_SCNfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for input. - */ -/*#define PERL_PRIfldbl "f" /**/ -/*#define PERL_PRIgldbl "g" /**/ -/*#define PERL_PRIeldbl "e" /**/ -/*#define PERL_SCNfldbl undef /**/ - -/* Off_t: - * This symbol holds the type used to declare offsets in the kernel. - * It can be int, long, off_t, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -/* LSEEKSIZE: - * This symbol holds the number of bytes used by the Off_t. - */ -/* Off_t_size: - * This symbol holds the number of bytes used by the Off_t. - */ -#define Off_t long /* <offset> type */ -#define LSEEKSIZE 4 /* <offset> size */ -#define Off_t_size 4 /* <offset> size */ - -/* Free_t: - * This variable contains the return type of free(). It is usually - * void, but occasionally int. - */ -/* Malloc_t: - * This symbol is the type of pointer returned by malloc and realloc. - */ -#define Malloc_t void * /**/ -#define Free_t void /**/ - -/* PERL_MALLOC_WRAP: - * This symbol, if defined, indicates that we'd like malloc wrap checks. - */ -#define PERL_MALLOC_WRAP /**/ - -/* MYMALLOC: - * This symbol, if defined, indicates that we're using our own malloc. - */ -#define MYMALLOC /**/ - -/* Mode_t: - * This symbol holds the type used to declare file modes - * for systems calls. It is usually mode_t, but may be - * int or unsigned short. It may be necessary to include <sys/types.h> - * to get any typedef'ed information. - */ -#define Mode_t mode_t /* file mode parameter for system calls */ - -/* VAL_O_NONBLOCK: - * This symbol is to be used during open() or fcntl(F_SETFL) to turn on - * non-blocking I/O for the file descriptor. Note that there is no way - * back, i.e. you cannot turn it blocking again this way. If you wish to - * alternatively switch between blocking and non-blocking, use the - * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. - */ -/* VAL_EAGAIN: - * This symbol holds the errno error code set by read() when no data was - * present on the non-blocking file descriptor. - */ -/* RD_NODATA: - * This symbol holds the return code from read() when no data is present - * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is - * not defined, then you can't distinguish between no data and EOF by - * issuing a read(). You'll have to find another way to tell for sure! - */ -/* EOF_NONBLOCK: - * This symbol, if defined, indicates to the C program that a read() on - * a non-blocking file descriptor will return 0 on EOF, and not the value - * held in RD_NODATA (-1 usually, in that case!). - */ -#define VAL_O_NONBLOCK O_NONBLOCK -#define VAL_EAGAIN EAGAIN -#define RD_NODATA -1 -#define EOF_NONBLOCK - -/* NEED_VA_COPY: - * This symbol, if defined, indicates that the system stores - * the variable argument list datatype, va_list, in a format - * that cannot be copied by simple assignment, so that some - * other means must be used when copying is required. - * As such systems vary in their provision (or non-provision) - * of copying mechanisms, handy.h defines a platform- - * independent macro, Perl_va_copy(src, dst), to do the job. - */ -/*#define NEED_VA_COPY /**/ - -/* Netdb_host_t: - * This symbol holds the type used for the 1st argument - * to gethostbyaddr(). - */ -/* Netdb_hlen_t: - * This symbol holds the type used for the 2nd argument - * to gethostbyaddr(). - */ -/* Netdb_name_t: - * This symbol holds the type used for the argument to - * gethostbyname(). - */ -/* Netdb_net_t: - * This symbol holds the type used for the 1st argument to - * getnetbyaddr(). - */ -#define Netdb_host_t char * /**/ -#define Netdb_hlen_t int /**/ -#define Netdb_name_t char * /**/ -#define Netdb_net_t long /**/ - -/* PERL_OTHERLIBDIRS: - * This variable contains a colon-separated set of paths for the perl - * binary to search for additional library files or modules. - * These directories will be tacked to the end of @INC. - * Perl will automatically search below each path for version- - * and architecture-specific directories. See PERL_INC_VERSION_LIST - * for more details. - */ -/*#define PERL_OTHERLIBDIRS "" /**/ - -/* HAS_QUAD: - * This symbol, if defined, tells that there's a 64-bit integer type, - * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one - * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T. - */ -/*#define HAS_QUAD /**/ -#ifdef HAS_QUAD -# define Quad_t __int64 /**/ -# define Uquad_t unsigned __int64 /**/ -# define QUADKIND 5 /**/ -# define QUAD_IS_INT 1 -# define QUAD_IS_LONG 2 -# define QUAD_IS_LONG_LONG 3 -# define QUAD_IS_INT64_T 4 -#endif - -/* IVTYPE: - * This symbol defines the C type used for Perl's IV. - */ -/* UVTYPE: - * This symbol defines the C type used for Perl's UV. - */ -/* I8TYPE: - * This symbol defines the C type used for Perl's I8. - */ -/* U8TYPE: - * This symbol defines the C type used for Perl's U8. - */ -/* I16TYPE: - * This symbol defines the C type used for Perl's I16. - */ -/* U16TYPE: - * This symbol defines the C type used for Perl's U16. - */ -/* I32TYPE: - * This symbol defines the C type used for Perl's I32. - */ -/* U32TYPE: - * This symbol defines the C type used for Perl's U32. - */ -/* I64TYPE: - * This symbol defines the C type used for Perl's I64. - */ -/* U64TYPE: - * This symbol defines the C type used for Perl's U64. - */ -/* NVTYPE: - * This symbol defines the C type used for Perl's NV. - */ -/* IVSIZE: - * This symbol contains the sizeof(IV). - */ -/* UVSIZE: - * This symbol contains the sizeof(UV). - */ -/* I8SIZE: - * This symbol contains the sizeof(I8). - */ -/* U8SIZE: - * This symbol contains the sizeof(U8). - */ -/* I16SIZE: - * This symbol contains the sizeof(I16). - */ -/* U16SIZE: - * This symbol contains the sizeof(U16). - */ -/* I32SIZE: - * This symbol contains the sizeof(I32). - */ -/* U32SIZE: - * This symbol contains the sizeof(U32). - */ -/* I64SIZE: - * This symbol contains the sizeof(I64). - */ -/* U64SIZE: - * This symbol contains the sizeof(U64). - */ -/* NVSIZE: - * This symbol contains the sizeof(NV). - */ -/* NV_PRESERVES_UV: - * This symbol, if defined, indicates that a variable of type NVTYPE - * can preserve all the bits of a variable of type UVTYPE. - */ -/* NV_PRESERVES_UV_BITS: - * This symbol contains the number of bits a variable of type NVTYPE - * can preserve of a variable of type UVTYPE. - */ -/* NV_ZERO_IS_ALLBITS_ZERO: - * This symbol, if defined, indicates that a variable of type NVTYPE - * stores 0.0 in memory as all bits zero. - */ -#define IVTYPE long /**/ -#define UVTYPE unsigned long /**/ -#define I8TYPE char /**/ -#define U8TYPE unsigned char /**/ -#define I16TYPE short /**/ -#define U16TYPE unsigned short /**/ -#define I32TYPE long /**/ -#define U32TYPE unsigned long /**/ -#ifdef HAS_QUAD -#define I64TYPE __int64 /**/ -#define U64TYPE unsigned __int64 /**/ -#endif -#define NVTYPE double /**/ -#define IVSIZE 4 /**/ -#define UVSIZE 4 /**/ -#define I8SIZE 1 /**/ -#define U8SIZE 1 /**/ -#define I16SIZE 2 /**/ -#define U16SIZE 2 /**/ -#define I32SIZE 4 /**/ -#define U32SIZE 4 /**/ -#ifdef HAS_QUAD -#define I64SIZE 8 /**/ -#define U64SIZE 8 /**/ -#endif -#define NVSIZE 8 /**/ -#define NV_PRESERVES_UV -#define NV_PRESERVES_UV_BITS undef -#undef NV_ZERO_IS_ALLBITS_ZERO -#if UVSIZE == 8 -# ifdef BYTEORDER -# if BYTEORDER == 0x1234 -# undef BYTEORDER -# define BYTEORDER 0x12345678 -# else -# if BYTEORDER == 0x4321 -# undef BYTEORDER -# define BYTEORDER 0x87654321 -# endif -# endif -# endif -#endif - -/* IVdf: - * This symbol defines the format string used for printing a Perl IV - * as a signed decimal integer. - */ -/* UVuf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned decimal integer. - */ -/* UVof: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned octal integer. - */ -/* UVxf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned hexadecimal integer in lowercase abcdef. - */ -/* UVXf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned hexadecimal integer in uppercase ABCDEF. - */ -/* NVef: - * This symbol defines the format string used for printing a Perl NV - * using %e-ish floating point format. - */ -/* NVff: - * This symbol defines the format string used for printing a Perl NV - * using %f-ish floating point format. - */ -/* NVgf: - * This symbol defines the format string used for printing a Perl NV - * using %g-ish floating point format. - */ -#define IVdf "ld" /**/ -#define UVuf "lu" /**/ -#define UVof "lo" /**/ -#define UVxf "lx" /**/ -#define UVXf "lX" /**/ -#define NVef "e" /**/ -#define NVff "f" /**/ -#define NVgf "g" /**/ - -/* Pid_t: - * This symbol holds the type used to declare process ids in the kernel. - * It can be int, uint, pid_t, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Pid_t int /* PID type */ - -/* PRIVLIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - */ -/* PRIVLIB_EXP: - * This symbol contains the ~name expanded version of PRIVLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define PRIVLIB "\\Storage Card\\perl58m\\lib" /**/ -#define PRIVLIB_EXP (win32_get_privlib("5.9.4")) /**/ - -/* PTRSIZE: - * This symbol contains the size of a pointer, so that the C preprocessor - * can make decisions based on it. It will be sizeof(void *) if - * the compiler supports (void *); otherwise it will be - * sizeof(char *). - */ -#define PTRSIZE 4 /**/ - -/* Drand01: - * This macro is to be used to generate uniformly distributed - * random numbers over the range [0., 1.[. You may have to supply - * an 'extern double drand48();' in your program since SunOS 4.1.3 - * doesn't provide you with anything relevant in its headers. - * See HAS_DRAND48_PROTO. - */ -/* Rand_seed_t: - * This symbol defines the type of the argument of the - * random seed function. - */ -/* seedDrand01: - * This symbol defines the macro to be used in seeding the - * random number generator (see Drand01). - */ -/* RANDBITS: - * This symbol indicates how many bits are produced by the - * function used to generate normalized random numbers. - * Values include 15, 16, 31, and 48. - */ -#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/ -#define Rand_seed_t unsigned /**/ -#define seedDrand01(x) srand((Rand_seed_t)x) /**/ -#define RANDBITS 15 /**/ - -/* SELECT_MIN_BITS: - * This symbol holds the minimum number of bits operated by select. - * That is, if you do select(n, ...), how many bits at least will be - * cleared in the masks if some activity is detected. Usually this - * is either n or 32*ceil(n/32), especially many little-endians do - * the latter. This is only useful if you have select(), naturally. - */ -#define SELECT_MIN_BITS 32 /**/ - -/* Select_fd_set_t: - * This symbol holds the type used for the 2nd, 3rd, and 4th - * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET - * is defined, and 'int *' otherwise. This is only useful if you - * have select(), of course. - */ -#define Select_fd_set_t Perl_fd_set * /**/ - -/* SIG_NAME: - * This symbol contains a list of signal names in order of - * signal number. This is intended - * to be used as a static array initialization, like this: - * char *sig_name[] = { SIG_NAME }; - * The signals in the list are separated with commas, and each signal - * is surrounded by double quotes. There is no leading SIG in the signal - * name, i.e. SIGQUIT is known as "QUIT". - * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn, - * etc., where nn is the actual signal number (e.g. NUM37). - * The signal number for sig_name[i] is stored in sig_num[i]. - * The last element is 0 to terminate the list with a NULL. This - * corresponds to the 0 at the end of the sig_name_init list. - * Note that this variable is initialized from the sig_name_init, - * not from sig_name (which is unused). - */ -/* SIG_NUM: - * This symbol contains a list of signal numbers, in the same order as the - * SIG_NAME list. It is suitable for static array initialization, as in: - * int sig_num[] = { SIG_NUM }; - * The signals in the list are separated with commas, and the indices - * within that list and the SIG_NAME list match, so it's easy to compute - * the signal name from a number or vice versa at the price of a small - * dynamic linear lookup. - * Duplicates are allowed, but are moved to the end of the list. - * The signal number corresponding to sig_name[i] is sig_number[i]. - * if (i < NSIG) then sig_number[i] == i. - * The last element is 0, corresponding to the 0 at the end of - * the sig_name_init list. - * Note that this variable is initialized from the sig_num_init, - * not from sig_num (which is unused). - */ -/* SIG_SIZE: - * This variable contains the number of elements of the SIG_NAME - * and SIG_NUM arrays, excluding the final NULL entry. - */ -#define SIG_NAME "ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/ -#define SIG_NUM 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0 /**/ -#define SIG_SIZE 27 /**/ - -/* SITEARCH: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-dependent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITEARCH_EXP: - * This symbol contains the ~name expanded version of SITEARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define SITEARCH "\\Storage Card\\perl58m\\site\\lib" /**/ -/*#define SITEARCH_EXP "" /**/ - -/* SITELIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-independent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITELIB_EXP: - * This symbol contains the ~name expanded version of SITELIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* SITELIB_STEM: - * This define is SITELIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -#define SITELIB "\\Storage Card\\perl58m\\site\\lib" /**/ -#define SITELIB_EXP (win32_get_sitelib("5.9.4")) /**/ -#define SITELIB_STEM "" /**/ - -/* Size_t_size: - * This symbol holds the size of a Size_t in bytes. - */ -#define Size_t_size 4 /**/ - -/* Size_t: - * This symbol holds the type used to declare length parameters - * for string functions. It is usually size_t, but may be - * unsigned long, int, etc. It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Size_t size_t /* length paramater for string functions */ - -/* Sock_size_t: - * This symbol holds the type used for the size argument of - * various socket calls (just the base type, not the pointer-to). - */ -#define Sock_size_t int /**/ - -/* SSize_t: - * This symbol holds the type used by functions that return - * a count of bytes or an error condition. It must be a signed type. - * It is usually ssize_t, but may be long or int, etc. - * It may be necessary to include <sys/types.h> or <unistd.h> - * to get any typedef'ed information. - * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). - */ -#define SSize_t int /* signed count of bytes */ - -/* STARTPERL: - * This variable contains the string to put in front of a perl - * script to make sure (one hopes) that it runs with perl and not - * some shell. - */ -#define STARTPERL "#!perl" /**/ - -/* STDCHAR: - * This symbol is defined to be the type of char used in stdio.h. - * It has the values "unsigned char" or "char". - */ -#define STDCHAR char /**/ - -/* HAS_STDIO_STREAM_ARRAY: - * This symbol, if defined, tells that there is an array - * holding the stdio streams. - */ -/* STDIO_STREAM_ARRAY: - * This symbol tells the name of the array holding the stdio streams. - * Usual values include _iob, __iob, and __sF. - */ -/*#define HAS_STDIO_STREAM_ARRAY /**/ -#define STDIO_STREAM_ARRAY - -/* Uid_t_f: - * This symbol defines the format string used for printing a Uid_t. - */ -#define Uid_t_f "ld" /**/ - -/* Uid_t_sign: - * This symbol holds the signedess of a Uid_t. - * 1 for unsigned, -1 for signed. - */ -#define Uid_t_sign -1 /* UID sign */ - -/* Uid_t_size: - * This symbol holds the size of a Uid_t in bytes. - */ -#define Uid_t_size 4 /* UID size */ - -/* Uid_t: - * This symbol holds the type used to declare user ids in the kernel. - * It can be int, ushort, uid_t, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Uid_t uid_t /* UID type */ - -/* USE_64_BIT_INT: - * This symbol, if defined, indicates that 64-bit integers should - * be used when available. If not defined, the native integers - * will be employed (be they 32 or 64 bits). The minimal possible - * 64-bitness is used, just enough to get 64-bit integers into Perl. - * This may mean using for example "long longs", while your memory - * may still be limited to 2 gigabytes. - */ -/* USE_64_BIT_ALL: - * This symbol, if defined, indicates that 64-bit integers should - * be used when available. If not defined, the native integers - * will be used (be they 32 or 64 bits). The maximal possible - * 64-bitness is employed: LP64 or ILP64, meaning that you will - * be able to use more than 2 gigabytes of memory. This mode is - * even more binary incompatible than USE_64_BIT_INT. You may not - * be able to run the resulting executable in a 32-bit CPU at all or - * you may need at least to reboot your OS to 64-bit mode. - */ -#ifndef USE_64_BIT_INT -/*#define USE_64_BIT_INT /**/ -#endif - -#ifndef USE_64_BIT_ALL -/*#define USE_64_BIT_ALL /**/ -#endif - -/* USE_LARGE_FILES: - * This symbol, if defined, indicates that large file support - * should be used when available. - */ -#ifndef USE_LARGE_FILES -/*#define USE_LARGE_FILES /**/ -#endif - -/* USE_LONG_DOUBLE: - * This symbol, if defined, indicates that long doubles should - * be used when available. - */ -#ifndef USE_LONG_DOUBLE -/*#define USE_LONG_DOUBLE /**/ -#endif - -/* USE_MORE_BITS: - * This symbol, if defined, indicates that 64-bit interfaces and - * long doubles should be used when available. - */ -#ifndef USE_MORE_BITS -/*#define USE_MORE_BITS /**/ -#endif - -/* MULTIPLICITY: - * This symbol, if defined, indicates that Perl should - * be built to use multiplicity. - */ -#ifndef MULTIPLICITY -/*#define MULTIPLICITY /**/ -#endif - -/* USE_PERLIO: - * This symbol, if defined, indicates that the PerlIO abstraction should - * be used throughout. If not defined, stdio should be - * used in a fully backward compatible manner. - */ -#ifndef USE_PERLIO -#define USE_PERLIO /**/ -#endif - -/* USE_SOCKS: - * This symbol, if defined, indicates that Perl should - * be built to use socks. - */ -#ifndef USE_SOCKS -/*#define USE_SOCKS /**/ -#endif - -/* USE_ITHREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the interpreter-based threading implementation. - */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - */ -/* OLD_PTHREADS_API: - * This symbol, if defined, indicates that Perl should - * be built to use the old draft POSIX threads API. - */ -/* USE_REENTRANT_API: - * This symbol, if defined, indicates that Perl should - * try to use the various _r versions of library functions. - * This is extremely experimental. - */ -/*#define USE_5005THREADS /**/ -/*#define USE_ITHREADS /**/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif -/*#define OLD_PTHREADS_API /**/ -/*#define USE_REENTRANT_API /**/ - -/* PERL_VENDORARCH: - * If defined, this symbol contains the name of a private library. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. - * It may have a ~ on the front. - * The standard distribution will put nothing in this directory. - * Vendors who distribute perl may wish to place their own - * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor - * or equivalent. See INSTALL for details. - */ -/* PERL_VENDORARCH_EXP: - * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/*#define PERL_VENDORARCH "" /**/ -/*#define PERL_VENDORARCH_EXP "" /**/ - -/* PERL_VENDORLIB_EXP: - * This symbol contains the ~name expanded version of VENDORLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* PERL_VENDORLIB_STEM: - * This define is PERL_VENDORLIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -/*#define PERL_VENDORLIB_EXP "" /**/ -/*#define PERL_VENDORLIB_STEM "" /**/ - -/* VOIDFLAGS: - * This symbol indicates how much support of the void type is given by this - * compiler. What various bits mean: - * - * 1 = supports declaration of void - * 2 = supports arrays of pointers to functions returning void - * 4 = supports comparisons between pointers to void functions and - * addresses of void functions - * 8 = suports declaration of generic void pointers - * - * The package designer should define VOIDUSED to indicate the requirements - * of the package. This can be done either by #defining VOIDUSED before - * including config.h, or by defining defvoidused in Myinit.U. If the - * latter approach is taken, only those flags will be tested. If the - * level of void support necessary is not present, defines void to int. - */ -#ifndef VOIDUSED -#define VOIDUSED 15 -#endif -#define VOIDFLAGS 15 -#if (VOIDFLAGS & VOIDUSED) != VOIDUSED -#define void int /* is void to be avoided? */ -#define M_VOID /* Xenix strikes again */ -#endif - -/* HASATTRIBUTE_FORMAT: - * Can we handle GCC attribute for checking printf-style formats - */ -/* HASATTRIBUTE_MALLOC: - * Can we handle GCC attribute for malloc-style functions. - */ -/* HASATTRIBUTE_NONNULL: - * Can we handle GCC attribute for nonnull function parms. - */ -/* HASATTRIBUTE_NORETURN: - * Can we handle GCC attribute for functions that do not return - */ -/* HASATTRIBUTE_PURE: - * Can we handle GCC attribute for pure functions - */ -/* HASATTRIBUTE_UNUSED: - * Can we handle GCC attribute for unused variables and arguments - */ -/* HASATTRIBUTE_WARN_UNUSED_RESULT: - * Can we handle GCC attribute for warning on unused results - */ -/*#define HASATTRIBUTE_FORMAT /**/ -/*#define HASATTRIBUTE_NORETURN /**/ -/*#define HASATTRIBUTE_MALLOC /**/ -/*#define HASATTRIBUTE_NONNULL /**/ -/*#define HASATTRIBUTE_PURE /**/ -/*#define HASATTRIBUTE_UNUSED /**/ -/*#define HASATTRIBUTE_WARN_UNUSED_RESULT /**/ - -/* HAS_CRYPT: - * This symbol, if defined, indicates that the crypt routine is available - * to encrypt passwords and the like. - */ -/*#define HAS_CRYPT /**/ - -/* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ -/* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ -/*#define SETUID_SCRIPTS_ARE_SECURE_NOW /**/ -/*#define DOSUID /**/ - -/* Shmat_t: - * This symbol holds the return type of the shmat() system call. - * Usually set to 'void *' or 'char *'. - */ -/* HAS_SHMAT_PROTOTYPE: - * This symbol, if defined, indicates that the sys/shm.h includes - * a prototype for shmat(). Otherwise, it is up to the program to - * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, - * but not always right so it should be emitted by the program only - * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. - */ -#define Shmat_t void * /**/ -/*#define HAS_SHMAT_PROTOTYPE /**/ - -/* I_NDBM: - * This symbol, if defined, indicates that <ndbm.h> exists and should - * be included. - */ -/*#define I_NDBM /**/ - -/* I_STDARG: - * This symbol, if defined, indicates that <stdarg.h> exists and should - * be included. - */ -/* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include <varargs.h>. - */ -#define I_STDARG /**/ -/*#define I_VARARGS /**/ - -/* CAN_PROTOTYPE: - * If defined, this macro indicates that the C compiler can handle - * function prototypes. - */ -/* _: - * This macro is used to declare function parameters for folks who want - * to make declarations with prototypes using a different style than - * the above macros. Use double parentheses. For example: - * - * int main _((int argc, char *argv[])); - */ -#define CAN_PROTOTYPE /**/ -#ifdef CAN_PROTOTYPE -#define _(args) args -#else -#define _(args) () -#endif - -/* SH_PATH: - * This symbol contains the full pathname to the shell used on this - * on this system to execute Bourne shell scripts. Usually, this will be - * /bin/sh, though it's possible that some systems will have /bin/ksh, - * /bin/pdksh, /bin/ash, /bin/bash, or even something such as - * D:/bin/sh.exe. - */ -#define SH_PATH "cmd /x /c" /**/ - -/* HAS_AINTL: - * This symbol, if defined, indicates that the aintl routine is - * available. If copysignl is also present we can emulate modfl. - */ -/*#define HAS_AINTL /**/ - -/* HAS_CLEARENV: - * This symbol, if defined, indicates that the clearenv () routine is - * available for use. - */ -/*#define HAS_CLEARENV /**/ - -/* HAS_COPYSIGNL: - * This symbol, if defined, indicates that the copysignl routine is - * available. If aintl is also present we can emulate modfl. - */ -/*#define HAS_COPYSIGNL /**/ - -/* HAS_DBMINIT_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the dbminit() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int dbminit(char *); - */ -/*#define HAS_DBMINIT_PROTO /**/ - -/* HAS_DIRFD: - * This manifest constant lets the C program know that dirfd - * is available. - */ -/*#define HAS_DIRFD /**/ - -/* HAS_FAST_STDIO: - * This symbol, if defined, indicates that the "fast stdio" - * is available to manipulate the stdio buffers directly. - */ -/*#define HAS_FAST_STDIO /**/ - -/* HAS_FLOCK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the flock() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int flock(int, int); - */ -/*#define HAS_FLOCK_PROTO /**/ - -/* HAS_FPCLASSL: - * This symbol, if defined, indicates that the fpclassl routine is - * available to classify long doubles. Available for example in IRIX. - * The returned values are defined in <ieeefp.h> and are: - * - * FP_SNAN signaling NaN - * FP_QNAN quiet NaN - * FP_NINF negative infinity - * FP_PINF positive infinity - * FP_NDENORM negative denormalized non-zero - * FP_PDENORM positive denormalized non-zero - * FP_NZERO negative zero - * FP_PZERO positive zero - * FP_NNORM negative normalized non-zero - * FP_PNORM positive normalized non-zero - */ -/*#define HAS_FPCLASSL /**/ - -/* HAS_ILOGBL: - * This symbol, if defined, indicates that the ilogbl routine is - * available. If scalbnl is also present we can emulate frexpl. - */ -/*#define HAS_ILOGBL /**/ - -/* LIBM_LIB_VERSION: - * This symbol, if defined, indicates that libm exports _LIB_VERSION - * and that math.h defines the enum to manipulate it. - */ -/*#define LIBM_LIB_VERSION /**/ - -/* HAS_NL_LANGINFO: - * This symbol, if defined, indicates that the nl_langinfo routine is - * available to return local data. You will also need <langinfo.h> - * and therefore I_LANGINFO. - */ -/*#define HAS_NL_LANGINFO /**/ - -/* HAS_PROCSELFEXE: - * This symbol is defined if PROCSELFEXE_PATH is a symlink - * to the absolute pathname of the executing program. - */ -/* PROCSELFEXE_PATH: - * If HAS_PROCSELFEXE is defined this symbol is the filename - * of the symbolic link pointing to the absolute pathname of - * the executing program. - */ -/*#define HAS_PROCSELFEXE /**/ -#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH) -#define PROCSELFEXE_PATH /**/ -#endif - -/* HAS_PTHREAD_ATTR_SETSCOPE: - * This symbol, if defined, indicates that the pthread_attr_setscope - * system call is available to set the contention scope attribute of - * a thread attribute object. - */ -/*#define HAS_PTHREAD_ATTR_SETSCOPE /**/ - -/* HAS_SCALBNL: - * This symbol, if defined, indicates that the scalbnl routine is - * available. If ilogbl is also present we can emulate frexpl. - */ -/*#define HAS_SCALBNL /**/ - -/* HAS_SIGPROCMASK: - * This symbol, if defined, indicates that the sigprocmask - * system call is available to examine or change the signal mask - * of the calling process. - */ -/*#define HAS_SIGPROCMASK /**/ - -/* HAS_SOCKATMARK: - * This symbol, if defined, indicates that the sockatmark routine is - * available to test whether a socket is at the out-of-band mark. - */ -/*#define HAS_SOCKATMARK /**/ - -/* HAS_SOCKATMARK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the sockatmark() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int sockatmark(int); - */ -/*#define HAS_SOCKATMARK_PROTO /**/ - -/* SPRINTF_RETURNS_STRLEN: - * This variable defines whether sprintf returns the length of the string - * (as per the ANSI spec). Some C libraries retain compatibility with - * pre-ANSI C and return a pointer to the passed in buffer; for these - * this variable will be undef. - */ -#define SPRINTF_RETURNS_STRLEN /**/ - -/* HAS_SETRESGID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresgid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); - */ -/*#define HAS_SETRESGID_PROTO /**/ - -/* HAS_SETRESUID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresuid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); - */ -/*#define HAS_SETRESUID_PROTO /**/ - -/* HAS_STRFTIME: - * This symbol, if defined, indicates that the strftime routine is - * available to do time formatting. - */ -/*#define HAS_STRFTIME /**/ - -/* HAS_STRLCAT: - * This symbol, if defined, indicates that the strlcat () routine is - * available to do string concatenation. - */ -/*#define HAS_STRLCAT /**/ - -/* HAS_STRLCPY: - * This symbol, if defined, indicates that the strlcpy () routine is - * available to do string copying. - */ -/*#define HAS_STRLCPY /**/ - -/* HAS_SYSCALL_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the syscall() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int syscall(int, ...); - * extern int syscall(long, ...); - */ -/*#define HAS_SYSCALL_PROTO /**/ - -/* U32_ALIGNMENT_REQUIRED: - * This symbol, if defined, indicates that you must access - * character data through U32-aligned pointers. - */ -#ifndef U32_ALIGNMENT_REQUIRED -/*#define U32_ALIGNMENT_REQUIRED /**/ -#endif - -/* HAS_USLEEP_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the usleep() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int usleep(useconds_t); - */ -/*#define HAS_USLEEP_PROTO /**/ - -/* I_CRYPT: - * This symbol, if defined, indicates that <crypt.h> exists and - * should be included. - */ -/*#define I_CRYPT /**/ - -/* I_FP: - * This symbol, if defined, indicates that <fp.h> exists and - * should be included. - */ -/*#define I_FP /**/ - -/* I_LANGINFO: - * This symbol, if defined, indicates that <langinfo.h> exists and - * should be included. - */ -/*#define I_LANGINFO /**/ - -/* USE_FAST_STDIO: - * This symbol, if defined, indicates that Perl should - * be built to use 'fast stdio'. - * Defaults to define in Perls 5.8 and earlier, to undef later. - */ -#ifndef USE_FAST_STDIO -/*#define USE_FAST_STDIO /**/ -#endif - -/* PERL_RELOCATABLE_INC: - * This symbol, if defined, indicates that we'd like to relocate entries - * in @INC at run time based on the location of the perl binary. - */ -#define PERL_RELOCATABLE_INC "undef" /**/ - -/* HAS_CTERMID_R: - * This symbol, if defined, indicates that the ctermid_r routine - * is available to ctermid re-entrantly. - */ -/* CTERMID_R_PROTO: - * This symbol encodes the prototype of ctermid_r. - * It is zero if d_ctermid_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctermid_r - * is defined. - */ -/*#define HAS_CTERMID_R /**/ -#define CTERMID_R_PROTO 0 /**/ - -/* HAS_ENDHOSTENT_R: - * This symbol, if defined, indicates that the endhostent_r routine - * is available to endhostent re-entrantly. - */ -/* ENDHOSTENT_R_PROTO: - * This symbol encodes the prototype of endhostent_r. - * It is zero if d_endhostent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endhostent_r - * is defined. - */ -/*#define HAS_ENDHOSTENT_R /**/ -#define ENDHOSTENT_R_PROTO 0 /**/ - -/* HAS_ENDNETENT_R: - * This symbol, if defined, indicates that the endnetent_r routine - * is available to endnetent re-entrantly. - */ -/* ENDNETENT_R_PROTO: - * This symbol encodes the prototype of endnetent_r. - * It is zero if d_endnetent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endnetent_r - * is defined. - */ -/*#define HAS_ENDNETENT_R /**/ -#define ENDNETENT_R_PROTO 0 /**/ - -/* HAS_ENDPROTOENT_R: - * This symbol, if defined, indicates that the endprotoent_r routine - * is available to endprotoent re-entrantly. - */ -/* ENDPROTOENT_R_PROTO: - * This symbol encodes the prototype of endprotoent_r. - * It is zero if d_endprotoent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endprotoent_r - * is defined. - */ -/*#define HAS_ENDPROTOENT_R /**/ -#define ENDPROTOENT_R_PROTO 0 /**/ - -/* HAS_ENDSERVENT_R: - * This symbol, if defined, indicates that the endservent_r routine - * is available to endservent re-entrantly. - */ -/* ENDSERVENT_R_PROTO: - * This symbol encodes the prototype of endservent_r. - * It is zero if d_endservent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endservent_r - * is defined. - */ -/*#define HAS_ENDSERVENT_R /**/ -#define ENDSERVENT_R_PROTO 0 /**/ - -/* HAS_GETHOSTBYADDR_R: - * This symbol, if defined, indicates that the gethostbyaddr_r routine - * is available to gethostbyaddr re-entrantly. - */ -/* GETHOSTBYADDR_R_PROTO: - * This symbol encodes the prototype of gethostbyaddr_r. - * It is zero if d_gethostbyaddr_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyaddr_r - * is defined. - */ -/*#define HAS_GETHOSTBYADDR_R /**/ -#define GETHOSTBYADDR_R_PROTO 0 /**/ - -/* HAS_GETHOSTBYNAME_R: - * This symbol, if defined, indicates that the gethostbyname_r routine - * is available to gethostbyname re-entrantly. - */ -/* GETHOSTBYNAME_R_PROTO: - * This symbol encodes the prototype of gethostbyname_r. - * It is zero if d_gethostbyname_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyname_r - * is defined. - */ -/*#define HAS_GETHOSTBYNAME_R /**/ -#define GETHOSTBYNAME_R_PROTO 0 /**/ - -/* HAS_GETHOSTENT_R: - * This symbol, if defined, indicates that the gethostent_r routine - * is available to gethostent re-entrantly. - */ -/* GETHOSTENT_R_PROTO: - * This symbol encodes the prototype of gethostent_r. - * It is zero if d_gethostent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostent_r - * is defined. - */ -/*#define HAS_GETHOSTENT_R /**/ -#define GETHOSTENT_R_PROTO 0 /**/ - -/* HAS_GETNETBYADDR_R: - * This symbol, if defined, indicates that the getnetbyaddr_r routine - * is available to getnetbyaddr re-entrantly. - */ -/* GETNETBYADDR_R_PROTO: - * This symbol encodes the prototype of getnetbyaddr_r. - * It is zero if d_getnetbyaddr_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyaddr_r - * is defined. - */ -/*#define HAS_GETNETBYADDR_R /**/ -#define GETNETBYADDR_R_PROTO 0 /**/ - -/* HAS_GETNETBYNAME_R: - * This symbol, if defined, indicates that the getnetbyname_r routine - * is available to getnetbyname re-entrantly. - */ -/* GETNETBYNAME_R_PROTO: - * This symbol encodes the prototype of getnetbyname_r. - * It is zero if d_getnetbyname_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyname_r - * is defined. - */ -/*#define HAS_GETNETBYNAME_R /**/ -#define GETNETBYNAME_R_PROTO 0 /**/ - -/* HAS_GETNETENT_R: - * This symbol, if defined, indicates that the getnetent_r routine - * is available to getnetent re-entrantly. - */ -/* GETNETENT_R_PROTO: - * This symbol encodes the prototype of getnetent_r. - * It is zero if d_getnetent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetent_r - * is defined. - */ -/*#define HAS_GETNETENT_R /**/ -#define GETNETENT_R_PROTO 0 /**/ - -/* HAS_GETPROTOBYNAME_R: - * This symbol, if defined, indicates that the getprotobyname_r routine - * is available to getprotobyname re-entrantly. - */ -/* GETPROTOBYNAME_R_PROTO: - * This symbol encodes the prototype of getprotobyname_r. - * It is zero if d_getprotobyname_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobyname_r - * is defined. - */ -/*#define HAS_GETPROTOBYNAME_R /**/ -#define GETPROTOBYNAME_R_PROTO 0 /**/ - -/* HAS_GETPROTOBYNUMBER_R: - * This symbol, if defined, indicates that the getprotobynumber_r routine - * is available to getprotobynumber re-entrantly. - */ -/* GETPROTOBYNUMBER_R_PROTO: - * This symbol encodes the prototype of getprotobynumber_r. - * It is zero if d_getprotobynumber_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobynumber_r - * is defined. - */ -/*#define HAS_GETPROTOBYNUMBER_R /**/ -#define GETPROTOBYNUMBER_R_PROTO 0 /**/ - -/* HAS_GETPROTOENT_R: - * This symbol, if defined, indicates that the getprotoent_r routine - * is available to getprotoent re-entrantly. - */ -/* GETPROTOENT_R_PROTO: - * This symbol encodes the prototype of getprotoent_r. - * It is zero if d_getprotoent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotoent_r - * is defined. - */ -/*#define HAS_GETPROTOENT_R /**/ -#define GETPROTOENT_R_PROTO 0 /**/ - -/* HAS_GETSERVBYNAME_R: - * This symbol, if defined, indicates that the getservbyname_r routine - * is available to getservbyname re-entrantly. - */ -/* GETSERVBYNAME_R_PROTO: - * This symbol encodes the prototype of getservbyname_r. - * It is zero if d_getservbyname_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyname_r - * is defined. - */ -/*#define HAS_GETSERVBYNAME_R /**/ -#define GETSERVBYNAME_R_PROTO 0 /**/ - -/* HAS_GETSERVBYPORT_R: - * This symbol, if defined, indicates that the getservbyport_r routine - * is available to getservbyport re-entrantly. - */ -/* GETSERVBYPORT_R_PROTO: - * This symbol encodes the prototype of getservbyport_r. - * It is zero if d_getservbyport_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyport_r - * is defined. - */ -/*#define HAS_GETSERVBYPORT_R /**/ -#define GETSERVBYPORT_R_PROTO 0 /**/ - -/* HAS_GETSERVENT_R: - * This symbol, if defined, indicates that the getservent_r routine - * is available to getservent re-entrantly. - */ -/* GETSERVENT_R_PROTO: - * This symbol encodes the prototype of getservent_r. - * It is zero if d_getservent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r - * is defined. - */ -/*#define HAS_GETSERVENT_R /**/ -#define GETSERVENT_R_PROTO 0 /**/ - -/* HAS_PTHREAD_ATFORK: - * This symbol, if defined, indicates that the pthread_atfork routine - * is available to setup fork handlers. - */ -/*#define HAS_PTHREAD_ATFORK /**/ - -/* HAS_READDIR64_R: - * This symbol, if defined, indicates that the readdir64_r routine - * is available to readdir64 re-entrantly. - */ -/* READDIR64_R_PROTO: - * This symbol encodes the prototype of readdir64_r. - * It is zero if d_readdir64_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir64_r - * is defined. - */ -/*#define HAS_READDIR64_R /**/ -#define READDIR64_R_PROTO 0 /**/ - -/* HAS_SETHOSTENT_R: - * This symbol, if defined, indicates that the sethostent_r routine - * is available to sethostent re-entrantly. - */ -/* SETHOSTENT_R_PROTO: - * This symbol encodes the prototype of sethostent_r. - * It is zero if d_sethostent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_sethostent_r - * is defined. - */ -/*#define HAS_SETHOSTENT_R /**/ -#define SETHOSTENT_R_PROTO 0 /**/ - -/* HAS_SETLOCALE_R: - * This symbol, if defined, indicates that the setlocale_r routine - * is available to setlocale re-entrantly. - */ -/* SETLOCALE_R_PROTO: - * This symbol encodes the prototype of setlocale_r. - * It is zero if d_setlocale_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setlocale_r - * is defined. - */ -/*#define HAS_SETLOCALE_R /**/ -#define SETLOCALE_R_PROTO 0 /**/ - -/* HAS_SETNETENT_R: - * This symbol, if defined, indicates that the setnetent_r routine - * is available to setnetent re-entrantly. - */ -/* SETNETENT_R_PROTO: - * This symbol encodes the prototype of setnetent_r. - * It is zero if d_setnetent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setnetent_r - * is defined. - */ -/*#define HAS_SETNETENT_R /**/ -#define SETNETENT_R_PROTO 0 /**/ - -/* HAS_SETPROTOENT_R: - * This symbol, if defined, indicates that the setprotoent_r routine - * is available to setprotoent re-entrantly. - */ -/* SETPROTOENT_R_PROTO: - * This symbol encodes the prototype of setprotoent_r. - * It is zero if d_setprotoent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setprotoent_r - * is defined. - */ -/*#define HAS_SETPROTOENT_R /**/ -#define SETPROTOENT_R_PROTO 0 /**/ - -/* HAS_SETSERVENT_R: - * This symbol, if defined, indicates that the setservent_r routine - * is available to setservent re-entrantly. - */ -/* SETSERVENT_R_PROTO: - * This symbol encodes the prototype of setservent_r. - * It is zero if d_setservent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setservent_r - * is defined. - */ -/*#define HAS_SETSERVENT_R /**/ -#define SETSERVENT_R_PROTO 0 /**/ - -/* HAS_TTYNAME_R: - * This symbol, if defined, indicates that the ttyname_r routine - * is available to ttyname re-entrantly. - */ -/* TTYNAME_R_PROTO: - * This symbol encodes the prototype of ttyname_r. - * It is zero if d_ttyname_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ttyname_r - * is defined. - */ -/*#define HAS_TTYNAME_R /**/ -#define TTYNAME_R_PROTO 0 /**/ - -#endif diff --git a/wince/config_h.PL b/wince/config_h.PL deleted file mode 100644 index 9a23252323..0000000000 --- a/wince/config_h.PL +++ /dev/null @@ -1,122 +0,0 @@ -# -BEGIN { warn "Running ".__FILE__."\n" }; -BEGIN - { - require "Config.pm"; - die "Config.pm:$@" if $@; - Config::->import; - } -use File::Compare qw(compare); -use File::Copy qw(copy); -my $name = $0; -$name =~ s#^(.*)\.PL$#../$1.SH#; -my %opt; -while (@ARGV && $ARGV[0] =~ /^([\w_]+)=(.*)$/) - { - $opt{$1}=$2; - shift(@ARGV); - } - -$opt{CONFIG_H} ||= 'config.h'; - -warn "Writing $opt{CONFIG_H}\n"; - -my $patchlevel = $opt{INST_VER}; -$patchlevel =~ s|^[\\/]||; -$patchlevel =~ s|~VERSION~|$Config{version}|g; -$patchlevel ||= $Config{version}; -$patchlevel = qq["$patchlevel"]; - -open(SH,"<$name") || die "Cannot open $name:$!"; -while (<SH>) - { - last if /^sed/; - } -($term,$file,$pat) = /^sed\s+<<(\S+)\s+>(\S+)\s+(.*)$/; - -$file =~ s/^\$(\w+)$/$opt{$1}/g; - -my $str = "sub munge\n{\n"; - -while ($pat =~ s/-e\s+'([^']*)'\s*//) - { - my $e = $1; - $e =~ s/\\([\(\)])/$1/g; - $e =~ s/\\(\d)/\$$1/g; - $str .= "$e;\n"; - } -$str .= "}\n"; - -eval $str; - -die "$str:$@" if $@; - -open(H,">$file.new") || die "Cannot open $file.new:$!"; -#binmode H; # no CRs (which cause a spurious rebuild) -while (<SH>) - { - last if /^$term$/o; - s/\$([\w_]+)/Config($1)/eg; - s/`([^\`]*)`/BackTick($1)/eg; - munge(); - s/\\\$/\$/g; - s#/[ *\*]*\*/#/**/#; - if (/^\s*#define\s+(PRIVLIB|SITELIB|VENDORLIB)_EXP/) - { - $_ = "#define ". $1 . "_EXP (win32_get_". lc($1) . "($patchlevel))\t/**/\n"; - } - # incpush() handles archlibs, so disable them - elsif (/^\s*#define\s+(ARCHLIB|SITEARCH|VENDORARCH)_EXP/) - { - $_ = "/*#define ". $1 . "_EXP \"\"\t/**/\n"; - } - print H; - } -close(H); -close(SH); - - -chmod(0666,"$opt{CORE_DIR}/$opt{CONFIG_H}"); -copy("$file.new","$opt{CORE_DIR}/$opt{CONFIG_H}") || die "Cannot copy:$!"; -chmod(0444,"$opt{CORE_DIR}/$opt{CONFIG_H}"); - -if (compare("$file.new",$file)) - { - warn "$file has changed\n"; - chmod(0666,$file); - unlink($file); - rename("$file.new",$file); - #chmod(0444,$file); - exit(1); - } -else - { - unlink ("$file.new"); - exit(0); - } - -sub Config -{ - my $var = shift; - my $val = $Config{$var}; - $val = 'undef' unless defined $val; - $val =~ s/\\/\\\\/g; - return $val; -} - -sub BackTick -{ - my $cmd = shift; - if ($cmd =~ /^echo\s+(.*?)\s*\|\s+sed\s+'(.*)'\s*$/) - { - local ($data,$pat) = ($1,$2); - $data =~ s/\s+/ /g; - eval "\$data =~ $pat"; - return $data; - } - else - { - die "Cannot handle \`$cmd\`"; - } - return $cmd; -} diff --git a/wince/config_sh.PL b/wince/config_sh.PL deleted file mode 100644 index 3314832e3b..0000000000 --- a/wince/config_sh.PL +++ /dev/null @@ -1,100 +0,0 @@ -use FindExt; -# take a semicolon separated path list and turn it into a quoted -# list of paths that Text::Parsewords will grok -sub mungepath { - my $p = shift; - # remove leading/trailing semis/spaces - $p =~ s/^[ ;]+//; - $p =~ s/[ ;]+$//; - $p =~ s/'/"/g; - my @p = map { $_ = "\"$_\"" if /\s/ and !/^".*"$/; $_ } split /;/, $p; - return join(' ', @p); -} - -# generate an array of option strings from command-line args -# or an option file -# -- added by BKS, 10-17-1999 to fix command-line overflow problems -sub loadopts { - if ($ARGV[0] =~ /--cfgsh-option-file/) { - shift @ARGV; - my $optfile = shift @ARGV; - local (*F); - open OPTF, $optfile or die "Can't open $optfile: $!\n"; - my @opts; - chomp(my $line = <OPTF>); - my @vars = split(/\t+~\t+/, $line); - for (@vars) { - push(@opts, $_) unless (/^\s*$/); - } - close OPTF; - return \@opts; - } - else { - return \@ARGV; - } -} - -FindExt::scan_ext("../ext"); - -my %opt; - -my $optref = loadopts(); -while (@{$optref} && $optref->[0] =~ /^([\w_]+)=(.*)$/) { - $opt{$1}=$2; - shift(@{$optref}); -} - -my @dynamic = FindExt::dynamic_ext(); -my @noxs = FindExt::nonxs_ext(); -my @known = sort(@dynamic,split(/\s+/,$opt{'staticext'}),@noxs); -$opt{'known_extensions'} = join(' ',@known); - -@dynamic = grep(!/Thread/,@dynamic); -@known = grep(!/Thread/,@dynamic); - -$opt{'dynamic_ext'} = join(' ',@dynamic); -$opt{'nonxs_ext'} = join(' ',@noxs); - -$opt{'extensions'} = join(' ',@known); - -my $pl_h = '../patchlevel.h'; - -if (-e $pl_h) { - open PL, "<$pl_h" or die "Can't open $pl_h: $!"; - while (<PL>) { - if (/^#\s*define\s+(PERL_\w+)\s+([\d.]+)/) { - $opt{$1} = $2; - } - } - close PL; -} -else { - die "Can't find $pl_h: $!"; -} -$opt{VERSION} = "$opt{PERL_REVISION}.$opt{PERL_VERSION}.$opt{PERL_SUBVERSION}"; -$opt{INST_VER} =~ s|~VERSION~|$opt{VERSION}|g; - -$opt{'cf_by'} = $ENV{USERNAME} unless $opt{'cf_by'}; -$opt{'cf_email'} = $opt{'cf_by'} . '@' . (gethostbyname('localhost'))[0] - unless $opt{'cf_email'}; -$opt{'usemymalloc'} = 'y' if $opt{'d_mymalloc'} eq 'define'; - -$opt{libpth} = mungepath($opt{libpth}) if exists $opt{libpth}; -$opt{incpath} = mungepath($opt{incpath}) if exists $opt{incpath}; - -while (<>) { - s/~([\w_]+)~/$opt{$1}/g; - if (/^([\w_]+)=(.*)$/) { - my($k,$v) = ($1,$2); - # this depends on cf_time being empty in the template (or we'll - # get a loop) - if ($k eq 'cf_time') { - $_ = "$k='" . localtime(time) . "'\n" if $v =~ /^\s*'\s*'/; - } - elsif (exists $opt{$k}) { - $_ = "$k='$opt{$k}'\n"; - } - } - print; -} - diff --git a/wince/dl_win32.xs b/wince/dl_win32.xs deleted file mode 100644 index 64dc731c6b..0000000000 --- a/wince/dl_win32.xs +++ /dev/null @@ -1,171 +0,0 @@ -/* dl_win32.xs - * - * Platform: Win32 (Windows NT/Windows 95) - * Author: Wei-Yuen Tan (wyt@hip.com) - * Created: A warm day in June, 1995 - * - * Modified: - * August 23rd 1995 - rewritten after losing everything when I - * wiped off my NT partition (eek!) - */ - -/* Porting notes: - -I merely took Paul's dl_dlopen.xs, took out extraneous stuff and -replaced the appropriate SunOS calls with the corresponding Win32 -calls. - -*/ - -#define WIN32_LEAN_AND_MEAN -#ifdef __GNUC__ -#define Win32_Winsock -#endif -#include <windows.h> -#include <string.h> - -#define PERL_NO_GET_CONTEXT - -#include "EXTERN.h" -#include "perl.h" -#include "win32.h" - -#include "XSUB.h" - -typedef struct { - SV * x_error_sv; -} my_cxtx_t; /* this *must* be named my_cxtx_t */ - -#define DL_CXT_EXTRA /* ask for dl_cxtx to be defined in dlutils.c */ -#include "dlutils.c" /* SaveError() etc */ - -#define dl_error_sv (dl_cxtx.x_error_sv) - -static char * -OS_Error_String(pTHX) -{ - dMY_CXT; - DWORD err = GetLastError(); - STRLEN len; - if (!dl_error_sv) - dl_error_sv = newSVpvn("",0); - PerlProc_GetOSError(dl_error_sv,err); - return SvPV(dl_error_sv,len); -} - -static void -dl_private_init(pTHX) -{ - (void)dl_generic_private_init(aTHX); -} - -/* - This function assumes the list staticlinkmodules - will be formed from package names with '::' replaced - with '/'. Thus Win32::OLE is in the list as Win32/OLE -*/ -static int -dl_static_linked(char *filename) -{ - char **p; - char* ptr; - static char subStr[] = "/auto/"; - char szBuffer[MAX_PATH]; - - /* change all the '\\' to '/' */ - strcpy(szBuffer, filename); - for(ptr = szBuffer; ptr = strchr(ptr, '\\'); ++ptr) - *ptr = '/'; - - /* delete the file name */ - ptr = strrchr(szBuffer, '/'); - if(ptr != NULL) - *ptr = '\0'; - - /* remove leading lib path */ - ptr = strstr(szBuffer, subStr); - if(ptr != NULL) - ptr += sizeof(subStr)-1; - else - ptr = szBuffer; - - for (p = staticlinkmodules; *p;p++) { - if (strstr(ptr, *p)) return 1; - }; - return 0; -} - -MODULE = DynaLoader PACKAGE = DynaLoader - -BOOT: - (void)dl_private_init(aTHX); - -void * -dl_load_file(filename,flags=0) - char * filename - int flags - PREINIT: - CODE: - { - DLDEBUG(1,PerlIO_printf(Perl_debug_log,"dl_load_file(%s):\n", filename)); - if (dl_static_linked(filename) == 0) { - RETVAL = PerlProc_DynaLoad(filename); - } - else - RETVAL = (void*) XCEGetModuleHandleA(NULL); - DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", RETVAL)); - ST(0) = sv_newmortal() ; - if (RETVAL == NULL) - SaveError(aTHX_ "load_file:%s", - OS_Error_String(aTHX)) ; - else - sv_setiv( ST(0), (IV)RETVAL); - } - -void * -dl_find_symbol(libhandle, symbolname) - void * libhandle - char * symbolname - CODE: - DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%s)\n", - libhandle, symbolname)); - RETVAL = (void*) XCEGetProcAddressA((HINSTANCE) libhandle, symbolname); - DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref = %x\n", RETVAL)); - ST(0) = sv_newmortal() ; - if (RETVAL == NULL) - SaveError(aTHX_ "find_symbol:%s", - OS_Error_String(aTHX)) ; - else - sv_setiv( ST(0), (IV)RETVAL); - - -void -dl_undef_symbols() - PPCODE: - - - -# These functions should not need changing on any platform: - -void -dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name - void * symref - char * filename - CODE: - DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n", - perl_name, symref)); - ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name, - (void(*)(pTHX_ CV *))symref, - filename))); - - -char * -dl_error() - CODE: - dMY_CXT; - RETVAL = dl_last_error; - OUTPUT: - RETVAL - -# end. diff --git a/wince/include/arpa/inet.h b/wince/include/arpa/inet.h deleted file mode 100644 index 0303df0876..0000000000 --- a/wince/include/arpa/inet.h +++ /dev/null @@ -1,4 +0,0 @@ -/* - * this is a dummy header file for Socket.xs - */ - diff --git a/wince/include/sys/socket.h b/wince/include/sys/socket.h deleted file mode 100644 index fbc6e098db..0000000000 --- a/wince/include/sys/socket.h +++ /dev/null @@ -1,217 +0,0 @@ -/* sys/socket.h */ - -/* djl */ -/* Provide UNIX compatibility */ - -#ifndef _INC_SYS_SOCKET -#define _INC_SYS_SOCKET - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _WINDOWS_ -#ifdef __GNUC__ -#define WIN32_LEAN_AND_MEAN -#ifdef __GNUC__ -#define Win32_Winsock -#endif -#include <windows.h> -#else -#define _WINDOWS_ - -#ifndef FAR -#define FAR -#endif - -#define PASCAL __stdcall -#define WINAPI __stdcall - -#undef WORD -typedef int BOOL; -typedef unsigned short WORD; -typedef void* HANDLE; -typedef void* HWND; -typedef int (FAR WINAPI *FARPROC)(); - -typedef unsigned long DWORD; -typedef void *PVOID; - -#define IN -#define OUT - -#ifndef UNDER_CE -typedef struct _OVERLAPPED { - DWORD Internal; - DWORD InternalHigh; - DWORD Offset; - DWORD OffsetHigh; - HANDLE hEvent; -} OVERLAPPED, *LPOVERLAPPED; -#endif - -#endif -#endif /* _WINDOWS_ */ -/* #ifndef __GNUC__ */ -#include <winsock.h> -/* #endif */ - -#define ENOTSOCK WSAENOTSOCK -#undef HOST_NOT_FOUND - -#ifdef USE_SOCKETS_AS_HANDLES - -#ifndef PERL_FD_SETSIZE -#define PERL_FD_SETSIZE 64 -#endif - -#define PERL_BITS_PER_BYTE 8 -#define PERL_NFDBITS (sizeof(Perl_fd_mask)*PERL_BITS_PER_BYTE) - -typedef int Perl_fd_mask; - -typedef struct Perl_fd_set { - Perl_fd_mask bits[(PERL_FD_SETSIZE+PERL_NFDBITS-1)/PERL_NFDBITS]; -} Perl_fd_set; - -#define PERL_FD_CLR(n,p) \ - ((p)->bits[(n)/PERL_NFDBITS] &= ~((unsigned)1 << ((n)%PERL_NFDBITS))) - -#define PERL_FD_SET(n,p) \ - ((p)->bits[(n)/PERL_NFDBITS] |= ((unsigned)1 << ((n)%PERL_NFDBITS))) - -#define PERL_FD_ZERO(p) memset((char *)(p),0,sizeof(*(p))) - -#define PERL_FD_ISSET(n,p) \ - ((p)->bits[(n)/PERL_NFDBITS] & ((unsigned)1 << ((n)%PERL_NFDBITS))) - -#else /* USE_SOCKETS_AS_HANDLES */ - -#define Perl_fd_set fd_set -#define PERL_FD_SET(n,p) FD_SET(n,p) -#define PERL_FD_CLR(n,p) FD_CLR(n,p) -#define PERL_FD_ISSET(n,p) FD_ISSET(n,p) -#define PERL_FD_ZERO(p) FD_ZERO(p) - -#endif /* USE_SOCKETS_AS_HANDLES */ - -SOCKET win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen); -int win32_bind (SOCKET s, const struct sockaddr *addr, int namelen); -int win32_closesocket (SOCKET s); -int win32_connect (SOCKET s, const struct sockaddr *name, int namelen); -int win32_ioctlsocket (SOCKET s, long cmd, u_long *argp); -int win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen); -int win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen); -int win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen); -u_long win32_htonl (u_long hostlong); -u_short win32_htons (u_short hostshort); -unsigned long win32_inet_addr (const char * cp); -char * win32_inet_ntoa (struct in_addr in); -int win32_listen (SOCKET s, int backlog); -u_long win32_ntohl (u_long netlong); -u_short win32_ntohs (u_short netshort); -int win32_recv (SOCKET s, char * buf, int len, int flags); -int win32_recvfrom (SOCKET s, char * buf, int len, int flags, - struct sockaddr *from, int * fromlen); -int win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds, - const struct timeval *timeout); -int win32_send (SOCKET s, const char * buf, int len, int flags); -int win32_sendto (SOCKET s, const char * buf, int len, int flags, - const struct sockaddr *to, int tolen); -int win32_setsockopt (SOCKET s, int level, int optname, - const char * optval, int optlen); -SOCKET win32_socket (int af, int type, int protocol); -int win32_shutdown (SOCKET s, int how); - -/* Database function prototypes */ - -struct hostent * win32_gethostbyaddr(const char * addr, int len, int type); -struct hostent * win32_gethostbyname(const char * name); -int win32_gethostname (char * name, int namelen); -struct servent * win32_getservbyport(int port, const char * proto); -struct servent * win32_getservbyname(const char * name, const char * proto); -struct protoent * win32_getprotobynumber(int proto); -struct protoent * win32_getprotobyname(const char * name); -struct protoent *win32_getprotoent(void); -struct servent *win32_getservent(void); -void win32_sethostent(int stayopen); -void win32_setnetent(int stayopen); -struct netent * win32_getnetent(void); -struct netent * win32_getnetbyname(char *name); -struct netent * win32_getnetbyaddr(long net, int type); -void win32_setprotoent(int stayopen); -void win32_setservent(int stayopen); -void win32_endhostent(void); -void win32_endnetent(void); -void win32_endprotoent(void); -void win32_endservent(void); - -#ifndef WIN32SCK_IS_STDSCK - -/* direct to our version */ - -#define htonl win32_htonl -#define htons win32_htons -#define ntohl win32_ntohl -#define ntohs win32_ntohs -#define inet_addr win32_inet_addr -#define inet_ntoa win32_inet_ntoa - -#define socket win32_socket -#define bind win32_bind -#define listen win32_listen -#define accept win32_accept -#define connect win32_connect -#define send win32_send -#define sendto win32_sendto -#define recv win32_recv -#define recvfrom win32_recvfrom -#define shutdown win32_shutdown -#define closesocket win32_closesocket -#define ioctlsocket win32_ioctlsocket -#define setsockopt win32_setsockopt -#define getsockopt win32_getsockopt -#define getpeername win32_getpeername -#define getsockname win32_getsockname -#define gethostname win32_gethostname -#define gethostbyname win32_gethostbyname -#define gethostbyaddr win32_gethostbyaddr -#define getprotobyname win32_getprotobyname -#define getprotobynumber win32_getprotobynumber -#define getservbyname win32_getservbyname -#define getservbyport win32_getservbyport -#define select win32_select -#define endhostent win32_endhostent -#define endnetent win32_endnetent -#define endprotoent win32_endprotoent -#define endservent win32_endservent -#define getnetent win32_getnetent -#define getnetbyname win32_getnetbyname -#define getnetbyaddr win32_getnetbyaddr -#define getprotoent win32_getprotoent -#define getservent win32_getservent -#define sethostent win32_sethostent -#define setnetent win32_setnetent -#define setprotoent win32_setprotoent -#define setservent win32_setservent - -#ifdef USE_SOCKETS_AS_HANDLES -#undef fd_set -#undef FD_SET -#undef FD_CLR -#undef FD_ISSET -#undef FD_ZERO -#define fd_set Perl_fd_set -#define FD_SET(n,p) PERL_FD_SET(n,p) -#define FD_CLR(n,p) PERL_FD_CLR(n,p) -#define FD_ISSET(n,p) PERL_FD_ISSET(n,p) -#define FD_ZERO(p) PERL_FD_ZERO(p) -#endif /* USE_SOCKETS_AS_HANDLES */ - -#endif /* WIN32SCK_IS_STDSCK */ - -#ifdef __cplusplus -} -#endif - -#endif /* _INC_SYS_SOCKET */ diff --git a/wince/makedist.pl b/wince/makedist.pl deleted file mode 100644 index 7216834ff1..0000000000 --- a/wince/makedist.pl +++ /dev/null @@ -1,296 +0,0 @@ -use strict; -use Cwd; -use File::Path; -use File::Find; - -my %opts = ( - #defaults - 'verbose' => 1, # verbose level, in range from 0 to 2 - 'distdir' => 'distdir', - 'unicode' => 1, # include unicode by default - 'minimal' => 0, # minimal possible distribution. - # actually this is just perl.exe and perlXX.dll - # but can be extended by additional exts - # ... (as soon as this will be implemented :) - 'cross-name' => 'wince', - 'strip-pod' => 0, # strip POD from perl modules - 'adaptation' => 1, # do some adaptation, such as stripping such - # occurences as "if ($^O eq 'VMS'){...}" for Dynaloader.pm - 'zip' => 0, # perform zip - 'clean-exts' => 0, - #options itself - (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth - (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt - ); - -# TODO -# -- error checking. When something goes wrong, just exit with rc!=0 -# -- may be '--zip' option should be made differently? - -my $cwd = cwd; - -if ($opts{'clean-exts'}) { - # unfortunately, unlike perl58.dll and like, extensions for different - # platforms are built in same directory, therefore we must be able to clean - # them often - unlink '../config.sh'; # delete cache config file, which remembers our previous config - chdir '../ext'; - find({no_chdir=>1,wanted => sub{ - unlink if /((?:\.obj|\/makefile|\/errno\.pm))$/i; - } - },'.'); - exit; -} - -# zip -if ($opts{'zip'}) { - if ($opts{'verbose'} >=1) { - print STDERR "zipping...\n"; - } - chdir $opts{'distdir'}; - unlink <*.zip>; - `zip -R perl-$opts{'cross-name'} *`; - exit; -} - -my (%libexclusions, %extexclusions); -my @lfiles; -sub copy($$); - -# lib -chdir '../lib'; -find({no_chdir=>1,wanted=>sub{push @lfiles, $_ if /\.p[lm]$/}},'.'); -chdir $cwd; -# exclusions -@lfiles = grep {!exists $libexclusions{$_}} @lfiles; -#inclusions -#... -#copy them -if ($opts{'verbose'} >=1) { - print STDERR "Copying perl lib files...\n"; -} -for (@lfiles) { - /^(.*)\/[^\/]+$/; - mkpath "$opts{distdir}/lib/$1"; - copy "../lib/$_", "$opts{distdir}/lib/$_"; -} - -#ext -my @efiles; -chdir '../ext'; -find({no_chdir=>1,wanted=>sub{push @efiles, $_ if /\.pm$/}},'.'); -chdir $cwd; -# exclusions -#... -#inclusions -#... -#copy them -#{s[/(\w+)/\1\.pm][/$1.pm]} @efiles; -if ($opts{'verbose'} >=1) { - print STDERR "Copying perl core extensions...\n"; -} -for (@efiles) { - if (m#^.*?/lib/(.*)$#) { - copy "../ext/$_", "$opts{distdir}/lib/$1"; - } - else { - /^(.*)\/([^\/]+)\/([^\/]+)$/; - copy "../ext/$_", "$opts{distdir}/lib/$1/$3"; - } -} -my ($dynaloader_pm); -if ($opts{adaptation}) { - # let's copy our Dynaloader.pm (make this optional?) - open my $fhdyna, ">$opts{distdir}/lib/Dynaloader.pm"; - print $fhdyna $dynaloader_pm; - close $fhdyna; -} - -# Config.pm, perl binaries -if ($opts{'verbose'} >=1) { - print STDERR "Copying Config.pm, perl.dll and perl.exe...\n"; -} -copy "../xlib/$opts{'cross-name'}/Config.pm", "$opts{distdir}/lib/Config.pm"; -copy "$opts{'cross-name'}/perl.exe", "$opts{distdir}/bin/perl.exe"; -copy "$opts{'cross-name'}/perl.dll", "$opts{distdir}/bin/perl.dll"; -# how do we know exact name of perl.dll? - -# auto -my %aexcl = (socket=>'Socket_1'); -# Socket.dll and may be some other conflict with same file in \windows dir -# on WinCE, %aexcl needed to replace it with a different name that however -# will be found by Dynaloader -my @afiles; -chdir "../xlib/$opts{'cross-name'}/auto"; -find({no_chdir=>1,wanted=>sub{push @afiles, $_ if /\.(dll|bs)$/}},'.'); -chdir $cwd; -if ($opts{'verbose'} >=1) { - print STDERR "Copying binaries for perl core extensions...\n"; -} -for (@afiles) { - if (/^(.*)\/(\w+)\.dll$/i && exists $aexcl{lc($2)}) { - copy "../xlib/$opts{'cross-name'}/auto/$_", "$opts{distdir}/lib/auto/$1/$aexcl{lc($2)}.dll"; - } - else { - copy "../xlib/$opts{'cross-name'}/auto/$_", "$opts{distdir}/lib/auto/$_"; - } -} - -sub copy($$) { - my ($fnfrom, $fnto) = @_; - open my $fh, "<$fnfrom" or die "can not open $fnfrom: $!"; - binmode $fh; - local $/; - my $ffrom = <$fh>; - if ($opts{'strip-pod'}) { - # actually following regexp is suspicious to not work everywhere. - # but we've checked on our set of modules, and it's fit for our purposes - $ffrom =~ s/^=\w+.*?^=cut(?:\n|\Z)//msg; - unless ($ffrom=~/\bAutoLoader\b/) { - # this logic actually strip less than could be stripped, but we're - # not risky. Just strip only of no mention of AutoLoader - $ffrom =~ s/^__END__.*\Z//msg; - } - } - mkpath $1 if $fnto=~/^(.*)\/([^\/]+)$/; - open my $fhout, ">$fnto"; - binmode $fhout; - print $fhout $ffrom; - if ($opts{'verbose'} >=2) { - print STDERR "copying $fnfrom=>$fnto\n"; - } -} - -BEGIN { -%libexclusions = map {$_=>1} split/\s/, <<"EOS"; -abbrev.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl complete.pl ctime.pl -dotsh.pl exceptions.pl fastcwd.pl flush.pl ftp.pl getcwd.pl getopt.pl -getopts.pl hostname.pl look.pl newgetopt.pl pwd.pl termcap.pl -EOS -%extexclusions = map {$_=>1} split/\s/, <<"EOS"; -EOS -$dynaloader_pm=<<'EOS'; -# This module designed *only* for WinCE -# if you encounter a problem with this file, try using original Dynaloader.pm -# from perl distribution, it's larger but essentially the same. -package DynaLoader; -our $VERSION = 1.04; - -$dl_debug ||= 0; - -@dl_require_symbols = (); # names of symbols we need - -#@dl_librefs = (); # things we have loaded -#@dl_modules = (); # Modules we have loaded - -boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && !defined(&dl_error); - -print STDERR "DynaLoader not linked into this perl\n" - unless defined(&boot_DynaLoader); - -1; # End of main code - -sub croak{require Carp;Carp::croak(@_)} -sub bootstrap_inherit { - my $module = $_[0]; - local *isa = *{"$module\::ISA"}; - local @isa = (@isa, 'DynaLoader'); - bootstrap(@_); -} -sub bootstrap { - # use local vars to enable $module.bs script to edit values - local(@args) = @_; - local($module) = $args[0]; - local(@dirs, $file); - - unless ($module) { - require Carp; - Carp::confess("Usage: DynaLoader::bootstrap(module)"); - } - - croak("Can't load module $module, dynamic loading not available in this perl.\n") - unless defined(&dl_load_file); - - my @modparts = split(/::/,$module); - my $modfname = $modparts[-1]; - my $modpname = join('/',@modparts); - - for (@INC) { - my $dir = "$_/auto/$modpname"; - next unless -d $dir; - my $try = "$dir/$modfname.dll"; - last if $file = ( (-f $try) && $try); - - $try = "$dir/${modfname}_1.dll"; - last if $file = ( (-f $try) && $try); - push @dirs, $dir; - } - $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file; - - croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)") - unless $file; - - (my $bootname = "boot_$module") =~ s/\W/_/g; - @dl_require_symbols = ($bootname); - - # optional '.bootstrap' perl script - my $bs = $file; - $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; - if (-s $bs) { # only read file if it's not empty - eval { do $bs; }; - warn "$bs: $@\n" if $@; - } - - my $libref = dl_load_file($file, 0) or - croak("Can't load '$file' for module $module: ".dl_error()); - - push(@dl_librefs,$libref); # record loaded object - - my @unresolved = dl_undef_symbols(); - if (@unresolved) { - require Carp; - Carp::carp("Undefined symbols present after loading $file: @unresolved\n"); - } - - my $boot_symbol_ref = dl_find_symbol($libref, $bootname) or - croak("Can't find '$bootname' symbol in $file\n"); - - push(@dl_modules, $module); - - boot: - my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file); - &$xs(@args); -} - -sub dl_findfile { - my (@args) = @_; - my (@dirs, $dir); - my (@found); - - arg: foreach(@args) { - if (m:/: && -f $_) { - push(@found,$_); - last arg unless wantarray; - next; - } - - if (s:^-L::) {push(@dirs, $_); next;} - if (m:/: && -d $_) {push(@dirs, $_); next;} - - for $dir (@dirs) { - next unless -d $dir; - for my $name (/\.dll$/i?($_):("$_.dll",$_)) { - print STDERR " checking in $dir for $name\n" if $dl_debug; - if (-f "$dir/$name") { - push(@found, "$dir/$name"); - next arg; - } - } - } - } - return $found[0] unless wantarray; - @found; -} -EOS -} - diff --git a/wince/makeico.pl b/wince/makeico.pl deleted file mode 100644 index 7b1d533fe0..0000000000 --- a/wince/makeico.pl +++ /dev/null @@ -1,45 +0,0 @@ -open ICO, ">perl.ico" or die $!; -while (<DATA>) { - chomp; - print ICO pack "H*", $_; -} -close ICO or die $!; - -# Create new hex data with -# perl -wle 'binmode STDIN; $/ = \32; while (<>) {print unpack "H*", $_}' <perl.ico.orig -# then place after __DATA__ -__DATA__ -000001000200101010000000000028010000260000002020100000000000e802 -00004e0100002800000010000000200000000100040000000000c00000000000 -0000000000000000000000000000000000000000800000800000008080008000 -00008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff00 -0000ff00ff00ffff0000ffffff00000040000004000000000433334000000000 -003bb3000000000004b33b400000000044644644000000044ee44ee440000004 -eeeeeeee4000000eeeeeeeeee000000eeeeeeeeee000000eeeeeeeeee0000006 -eeeeefee60000000eeeeeeef000000000eeeeef0000000000066660000000000 -0000000000000000000000000000f00f0000f81f0000fc3f0000f81f0000f00f -0000e0070000e0070000e0070000e0070000e0070000e0070000f00f0000f81f -0000fc3f0000ffff0000ffff0000280000002000000040000000010004000000 -0000800200000000000000000000000000000000000000000000000080000080 -000000808000800000008000800080800000c0c0c000808080000000ff0000ff -000000ffff00ff000000ff00ff00ffff0000ffffff0000000000044000004000 -00440000000000000000004444040404444000000000000000000004b3430343 -b400000000000000000000004bb333bb40000000000000000000000043bbbbb3 -4000000000000000000000004b3b3b3b400000000000000000000004bbb3b3bb -b4000000000000000000004b444b3b444b40000000000000000004b46644b446 -64b400000000000000004b46e6e4b4e6e64b4000000000000004b46e6e64446e -6e64b40000000000000446e6e6e646e6e6e644000000000000046e6e6e6e4eee -ee6e6400000000000066e6e6eeee4eeeeeeee66000000000006e6e6eeeeeeeee -eeeeee60000000000066e6eeeeeeeeeeeeeeee6000000000006e6eeeeeeeeeee -eeeeee60000000000066eeeeeeeeeeeeeeeeee6000000000006e6eeeeeeeeeee -feeeee60000000000066eeeeeeeeeeeefeeeef600000000000066eeeeeeeeeef -feeee600000000000006eeeeeeeeefffeeeef6000000000000006eeeeeeeeeee -eeef600000000000000006eeeeeeeeeeeef60000000000000000006eeeeeeeee -ef60000000000000000000066eeeeeef66000000000000000000000006666666 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ff8000ffffc001ffffe0 -03fffff007fffff007fffff007ffffe003ffffc001ffff8000ffff00007ffe00 -003ffe00003ffe00003ffc00001ffc00001ffc00001ffc00001ffc00001ffc00 -001ffc00001ffe00003ffe00003fff00007fff8000ffffc001ffffe003fffff8 -0fffffffffffffffffffffffffffffffffffffffffff diff --git a/wince/perl.rc b/wince/perl.rc deleted file mode 100644 index 02507c1317..0000000000 --- a/wince/perl.rc +++ /dev/null @@ -1,36 +0,0 @@ -#include <windows.h> - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -1 ICON DISCARDABLE "perl.ico" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 5,6,0,0 - PRODUCTVERSION 5,6,0,0 - FILEFLAGSMASK 0x3FL - FILEFLAGS 0x0L - FILEOS 0x4L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904B0" - BEGIN - VALUE "CompanyName", "Paranoyaxc Inc\0" - VALUE "FileDescription", "Perl for WindowsCE\0" - VALUE "FileVersion", "1, 0, 0, 0\0" - VALUE "InternalName", "PerlCE\0" - VALUE "LegalCopyright", "Copyright (C) Larry Wall\0" - VALUE "OriginalFilename", "perl.exe" - VALUE "ProductName", "Perl\0" - VALUE "ProductVersion", "5, 7, 2, 0\0" - VALUE "OLESelfRegister", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/wince/perlhost.h b/wince/perlhost.h deleted file mode 100644 index a15ff6d5fb..0000000000 --- a/wince/perlhost.h +++ /dev/null @@ -1,2434 +0,0 @@ -/* perlhost.h - * - * (c) 1999 Microsoft Corporation. All rights reserved. - * Portions (c) 1999 ActiveState Tool Corp, http://www.ActiveState.com/ - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - */ - -#ifndef UNDER_CE -#define CHECK_HOST_INTERP -#endif - -#ifndef ___PerlHost_H___ -#define ___PerlHost_H___ - -#ifndef UNDER_CE -#include <signal.h> -#endif -#include "iperlsys.h" -#include "vmem.h" -#include "vdir.h" - -START_EXTERN_C -extern char * g_win32_get_privlib(const char *pl); -extern char * g_win32_get_sitelib(const char *pl); -extern char * g_win32_get_vendorlib(const char *pl); -extern char * g_getlogin(void); -END_EXTERN_C - -class CPerlHost -{ -public: - /* Constructors */ - CPerlHost(void); - CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc); - CPerlHost(CPerlHost& host); - ~CPerlHost(void); - - static CPerlHost* IPerlMem2Host(struct IPerlMem* piPerl); - static CPerlHost* IPerlMemShared2Host(struct IPerlMem* piPerl); - static CPerlHost* IPerlMemParse2Host(struct IPerlMem* piPerl); - static CPerlHost* IPerlEnv2Host(struct IPerlEnv* piPerl); - static CPerlHost* IPerlStdIO2Host(struct IPerlStdIO* piPerl); - static CPerlHost* IPerlLIO2Host(struct IPerlLIO* piPerl); - static CPerlHost* IPerlDir2Host(struct IPerlDir* piPerl); - static CPerlHost* IPerlSock2Host(struct IPerlSock* piPerl); - static CPerlHost* IPerlProc2Host(struct IPerlProc* piPerl); - - BOOL PerlCreate(void); - int PerlParse(int argc, char** argv, char** env); - int PerlRun(void); - void PerlDestroy(void); - -/* IPerlMem */ - /* Locks provided but should be unnecessary as this is private pool */ - inline void* Malloc(size_t size) { return m_pVMem->Malloc(size); }; - inline void* Realloc(void* ptr, size_t size) { return m_pVMem->Realloc(ptr, size); }; - inline void Free(void* ptr) { m_pVMem->Free(ptr); }; - inline void* Calloc(size_t num, size_t size) - { - size_t count = num*size; - void* lpVoid = Malloc(count); - if (lpVoid) - ZeroMemory(lpVoid, count); - return lpVoid; - }; - inline void GetLock(void) { m_pVMem->GetLock(); }; - inline void FreeLock(void) { m_pVMem->FreeLock(); }; - inline int IsLocked(void) { return m_pVMem->IsLocked(); }; - -/* IPerlMemShared */ - /* Locks used to serialize access to the pool */ - inline void GetLockShared(void) { m_pVMemShared->GetLock(); }; - inline void FreeLockShared(void) { m_pVMemShared->FreeLock(); }; - inline int IsLockedShared(void) { return m_pVMemShared->IsLocked(); }; - inline void* MallocShared(size_t size) - { - void *result; - GetLockShared(); - result = m_pVMemShared->Malloc(size); - FreeLockShared(); - return result; - }; - inline void* ReallocShared(void* ptr, size_t size) - { - void *result; - GetLockShared(); - result = m_pVMemShared->Realloc(ptr, size); - FreeLockShared(); - return result; - }; - inline void FreeShared(void* ptr) - { - GetLockShared(); - m_pVMemShared->Free(ptr); - FreeLockShared(); - }; - inline void* CallocShared(size_t num, size_t size) - { - size_t count = num*size; - void* lpVoid = MallocShared(count); - if (lpVoid) - ZeroMemory(lpVoid, count); - return lpVoid; - }; - -/* IPerlMemParse */ - /* Assume something else is using locks to mangaging serialize - on a batch basis - */ - inline void GetLockParse(void) { m_pVMemParse->GetLock(); }; - inline void FreeLockParse(void) { m_pVMemParse->FreeLock(); }; - inline int IsLockedParse(void) { return m_pVMemParse->IsLocked(); }; - inline void* MallocParse(size_t size) { return m_pVMemParse->Malloc(size); }; - inline void* ReallocParse(void* ptr, size_t size) { return m_pVMemParse->Realloc(ptr, size); }; - inline void FreeParse(void* ptr) { m_pVMemParse->Free(ptr); }; - inline void* CallocParse(size_t num, size_t size) - { - size_t count = num*size; - void* lpVoid = MallocParse(count); - if (lpVoid) - ZeroMemory(lpVoid, count); - return lpVoid; - }; - -/* IPerlEnv */ - char *Getenv(const char *varname); - int Putenv(const char *envstring); - inline char *Getenv(const char *varname, unsigned long *len) - { - *len = 0; - char *e = Getenv(varname); - if (e) - *len = strlen(e); - return e; - } - void* CreateChildEnv(void) { return CreateLocalEnvironmentStrings(*m_pvDir); }; - void FreeChildEnv(void* pStr) { FreeLocalEnvironmentStrings((char*)pStr); }; - char* GetChildDir(void); - void FreeChildDir(char* pStr); - void Reset(void); - void Clearenv(void); - - inline LPSTR GetIndex(DWORD &dwIndex) - { - if(dwIndex < m_dwEnvCount) - { - ++dwIndex; - return m_lppEnvList[dwIndex-1]; - } - return NULL; - }; - -protected: - LPSTR Find(LPCSTR lpStr); - void Add(LPCSTR lpStr); - - LPSTR CreateLocalEnvironmentStrings(VDir &vDir); - void FreeLocalEnvironmentStrings(LPSTR lpStr); - LPSTR* Lookup(LPCSTR lpStr); - DWORD CalculateEnvironmentSpace(void); - -public: - -/* IPerlDIR */ - virtual int Chdir(const char *dirname); - -/* IPerllProc */ - void Abort(void); - void Exit(int status); - void _Exit(int status); - int Execl(const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3); - int Execv(const char *cmdname, const char *const *argv); - int Execvp(const char *cmdname, const char *const *argv); - - inline VMem* GetMemShared(void) { m_pVMemShared->AddRef(); return m_pVMemShared; }; - inline VMem* GetMemParse(void) { m_pVMemParse->AddRef(); return m_pVMemParse; }; - inline VDir* GetDir(void) { return m_pvDir; }; - -public: - - struct IPerlMem m_hostperlMem; - struct IPerlMem m_hostperlMemShared; - struct IPerlMem m_hostperlMemParse; - struct IPerlEnv m_hostperlEnv; - struct IPerlStdIO m_hostperlStdIO; - struct IPerlLIO m_hostperlLIO; - struct IPerlDir m_hostperlDir; - struct IPerlSock m_hostperlSock; - struct IPerlProc m_hostperlProc; - - struct IPerlMem* m_pHostperlMem; - struct IPerlMem* m_pHostperlMemShared; - struct IPerlMem* m_pHostperlMemParse; - struct IPerlEnv* m_pHostperlEnv; - struct IPerlStdIO* m_pHostperlStdIO; - struct IPerlLIO* m_pHostperlLIO; - struct IPerlDir* m_pHostperlDir; - struct IPerlSock* m_pHostperlSock; - struct IPerlProc* m_pHostperlProc; - - inline char* MapPathA(const char *pInName) { return m_pvDir->MapPathA(pInName); }; - inline WCHAR* MapPathW(const WCHAR *pInName) { return m_pvDir->MapPathW(pInName); }; -protected: - - VDir* m_pvDir; - VMem* m_pVMem; - VMem* m_pVMemShared; - VMem* m_pVMemParse; - - DWORD m_dwEnvCount; - LPSTR* m_lppEnvList; - BOOL m_bTopLevel; // is this a toplevel host? - static long num_hosts; -public: - inline int LastHost(void) { return num_hosts == 1L; }; - struct interpreter *host_perl; -}; - -long CPerlHost::num_hosts = 0L; - -extern "C" void win32_checkTLS(struct interpreter *host_perl); - -#define STRUCT2RAWPTR(x, y) (CPerlHost*)(((LPBYTE)x)-offsetof(CPerlHost, y)) -#ifdef CHECK_HOST_INTERP -inline CPerlHost* CheckInterp(CPerlHost *host) -{ - win32_checkTLS(host->host_perl); - return host; -} -#define STRUCT2PTR(x, y) CheckInterp(STRUCT2RAWPTR(x, y)) -#else -#define STRUCT2PTR(x, y) STRUCT2RAWPTR(x, y) -#endif - -inline CPerlHost* IPerlMem2Host(struct IPerlMem* piPerl) -{ - return STRUCT2RAWPTR(piPerl, m_hostperlMem); -} - -inline CPerlHost* IPerlMemShared2Host(struct IPerlMem* piPerl) -{ - return STRUCT2RAWPTR(piPerl, m_hostperlMemShared); -} - -inline CPerlHost* IPerlMemParse2Host(struct IPerlMem* piPerl) -{ - return STRUCT2RAWPTR(piPerl, m_hostperlMemParse); -} - -inline CPerlHost* IPerlEnv2Host(struct IPerlEnv* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlEnv); -} - -inline CPerlHost* IPerlStdIO2Host(struct IPerlStdIO* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlStdIO); -} - -inline CPerlHost* IPerlLIO2Host(struct IPerlLIO* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlLIO); -} - -inline CPerlHost* IPerlDir2Host(struct IPerlDir* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlDir); -} - -inline CPerlHost* IPerlSock2Host(struct IPerlSock* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlSock); -} - -inline CPerlHost* IPerlProc2Host(struct IPerlProc* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlProc); -} - - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlMem2Host(x) - -/* IPerlMem */ -void* -PerlMemMalloc(struct IPerlMem* piPerl, size_t size) -{ - return IPERL2HOST(piPerl)->Malloc(size); -} -void* -PerlMemRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - return IPERL2HOST(piPerl)->Realloc(ptr, size); -} -void -PerlMemFree(struct IPerlMem* piPerl, void* ptr) -{ - IPERL2HOST(piPerl)->Free(ptr); -} -void* -PerlMemCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - return IPERL2HOST(piPerl)->Calloc(num, size); -} - -void -PerlMemGetLock(struct IPerlMem* piPerl) -{ - IPERL2HOST(piPerl)->GetLock(); -} - -void -PerlMemFreeLock(struct IPerlMem* piPerl) -{ - IPERL2HOST(piPerl)->FreeLock(); -} - -int -PerlMemIsLocked(struct IPerlMem* piPerl) -{ - return IPERL2HOST(piPerl)->IsLocked(); -} - -struct IPerlMem perlMem = -{ - PerlMemMalloc, - PerlMemRealloc, - PerlMemFree, - PerlMemCalloc, - PerlMemGetLock, - PerlMemFreeLock, - PerlMemIsLocked, -}; - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlMemShared2Host(x) - -/* IPerlMemShared */ -void* -PerlMemSharedMalloc(struct IPerlMem* piPerl, size_t size) -{ - return IPERL2HOST(piPerl)->MallocShared(size); -} -void* -PerlMemSharedRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - return IPERL2HOST(piPerl)->ReallocShared(ptr, size); -} -void -PerlMemSharedFree(struct IPerlMem* piPerl, void* ptr) -{ - IPERL2HOST(piPerl)->FreeShared(ptr); -} -void* -PerlMemSharedCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - return IPERL2HOST(piPerl)->CallocShared(num, size); -} - -void -PerlMemSharedGetLock(struct IPerlMem* piPerl) -{ - IPERL2HOST(piPerl)->GetLockShared(); -} - -void -PerlMemSharedFreeLock(struct IPerlMem* piPerl) -{ - IPERL2HOST(piPerl)->FreeLockShared(); -} - -int -PerlMemSharedIsLocked(struct IPerlMem* piPerl) -{ - return IPERL2HOST(piPerl)->IsLockedShared(); -} - -struct IPerlMem perlMemShared = -{ - PerlMemSharedMalloc, - PerlMemSharedRealloc, - PerlMemSharedFree, - PerlMemSharedCalloc, - PerlMemSharedGetLock, - PerlMemSharedFreeLock, - PerlMemSharedIsLocked, -}; - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlMemParse2Host(x) - -/* IPerlMemParse */ -void* -PerlMemParseMalloc(struct IPerlMem* piPerl, size_t size) -{ - return IPERL2HOST(piPerl)->MallocParse(size); -} -void* -PerlMemParseRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - return IPERL2HOST(piPerl)->ReallocParse(ptr, size); -} -void -PerlMemParseFree(struct IPerlMem* piPerl, void* ptr) -{ - IPERL2HOST(piPerl)->FreeParse(ptr); -} -void* -PerlMemParseCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - return IPERL2HOST(piPerl)->CallocParse(num, size); -} - -void -PerlMemParseGetLock(struct IPerlMem* piPerl) -{ - IPERL2HOST(piPerl)->GetLockParse(); -} - -void -PerlMemParseFreeLock(struct IPerlMem* piPerl) -{ - IPERL2HOST(piPerl)->FreeLockParse(); -} - -int -PerlMemParseIsLocked(struct IPerlMem* piPerl) -{ - return IPERL2HOST(piPerl)->IsLockedParse(); -} - -struct IPerlMem perlMemParse = -{ - PerlMemParseMalloc, - PerlMemParseRealloc, - PerlMemParseFree, - PerlMemParseCalloc, - PerlMemParseGetLock, - PerlMemParseFreeLock, - PerlMemParseIsLocked, -}; - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlEnv2Host(x) - -/* IPerlEnv */ -char* -PerlEnvGetenv(struct IPerlEnv* piPerl, const char *varname) -{ - return IPERL2HOST(piPerl)->Getenv(varname); -}; - -int -PerlEnvPutenv(struct IPerlEnv* piPerl, const char *envstring) -{ - return IPERL2HOST(piPerl)->Putenv(envstring); -}; - -char* -PerlEnvGetenv_len(struct IPerlEnv* piPerl, const char* varname, unsigned long* len) -{ - return IPERL2HOST(piPerl)->Getenv(varname, len); -} - -int -PerlEnvUname(struct IPerlEnv* piPerl, struct utsname *name) -{ - return win32_uname(name); -} - -void -PerlEnvClearenv(struct IPerlEnv* piPerl) -{ - IPERL2HOST(piPerl)->Clearenv(); -} - -void* -PerlEnvGetChildenv(struct IPerlEnv* piPerl) -{ - return IPERL2HOST(piPerl)->CreateChildEnv(); -} - -void -PerlEnvFreeChildenv(struct IPerlEnv* piPerl, void* childEnv) -{ - IPERL2HOST(piPerl)->FreeChildEnv(childEnv); -} - -char* -PerlEnvGetChilddir(struct IPerlEnv* piPerl) -{ - return IPERL2HOST(piPerl)->GetChildDir(); -} - -void -PerlEnvFreeChilddir(struct IPerlEnv* piPerl, char* childDir) -{ - IPERL2HOST(piPerl)->FreeChildDir(childDir); -} - -unsigned long -PerlEnvOsId(struct IPerlEnv* piPerl) -{ - return win32_os_id(); -} - -char* -PerlEnvLibPath(struct IPerlEnv* piPerl, const char *pl) -{ - return g_win32_get_privlib(pl); -} - -char* -PerlEnvSiteLibPath(struct IPerlEnv* piPerl, const char *pl) -{ - return g_win32_get_sitelib(pl); -} - -char* -PerlEnvVendorLibPath(struct IPerlEnv* piPerl, const char *pl) -{ - return g_win32_get_vendorlib(pl); -} - -void -PerlEnvGetChildIO(struct IPerlEnv* piPerl, child_IO_table* ptr) -{ - win32_get_child_IO(ptr); -} - -struct IPerlEnv perlEnv = -{ - PerlEnvGetenv, - PerlEnvPutenv, - PerlEnvGetenv_len, - PerlEnvUname, - PerlEnvClearenv, - PerlEnvGetChildenv, - PerlEnvFreeChildenv, - PerlEnvGetChilddir, - PerlEnvFreeChilddir, - PerlEnvOsId, - PerlEnvLibPath, - PerlEnvSiteLibPath, - PerlEnvVendorLibPath, - PerlEnvGetChildIO, -}; - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlStdIO2Host(x) - -/* PerlStdIO */ -FILE* -PerlStdIOStdin(struct IPerlStdIO* piPerl) -{ - return win32_stdin(); -} - -FILE* -PerlStdIOStdout(struct IPerlStdIO* piPerl) -{ - return win32_stdout(); -} - -FILE* -PerlStdIOStderr(struct IPerlStdIO* piPerl) -{ - return win32_stderr(); -} - -FILE* -PerlStdIOOpen(struct IPerlStdIO* piPerl, const char *path, const char *mode) -{ - return win32_fopen(path, mode); -} - -int -PerlStdIOClose(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_fclose((pf)); -} - -int -PerlStdIOEof(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_feof(pf); -} - -int -PerlStdIOError(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_ferror(pf); -} - -void -PerlStdIOClearerr(struct IPerlStdIO* piPerl, FILE* pf) -{ - win32_clearerr(pf); -} - -int -PerlStdIOGetc(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_getc(pf); -} - -char* -PerlStdIOGetBase(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef FILE_base - FILE *f = pf; - return FILE_base(f); -#else - return Nullch; -#endif -} - -int -PerlStdIOGetBufsiz(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef FILE_bufsiz - FILE *f = pf; - return FILE_bufsiz(f); -#else - return (-1); -#endif -} - -int -PerlStdIOGetCnt(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef USE_STDIO_PTR - FILE *f = pf; - return FILE_cnt(f); -#else - return (-1); -#endif -} - -char* -PerlStdIOGetPtr(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef USE_STDIO_PTR - FILE *f = pf; - return FILE_ptr(f); -#else - return Nullch; -#endif -} - -char* -PerlStdIOGets(struct IPerlStdIO* piPerl, FILE* pf, char* s, int n) -{ - return win32_fgets(s, n, pf); -} - -int -PerlStdIOPutc(struct IPerlStdIO* piPerl, FILE* pf, int c) -{ - return win32_fputc(c, pf); -} - -int -PerlStdIOPuts(struct IPerlStdIO* piPerl, FILE* pf, const char *s) -{ - return win32_fputs(s, pf); -} - -int -PerlStdIOFlush(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_fflush(pf); -} - -int -PerlStdIOUngetc(struct IPerlStdIO* piPerl,int c, FILE* pf) -{ - return win32_ungetc(c, pf); -} - -int -PerlStdIOFileno(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_fileno(pf); -} - -FILE* -PerlStdIOFdopen(struct IPerlStdIO* piPerl, int fd, const char *mode) -{ - return win32_fdopen(fd, mode); -} - -FILE* -PerlStdIOReopen(struct IPerlStdIO* piPerl, const char*path, const char*mode, FILE* pf) -{ - return win32_freopen(path, mode, (FILE*)pf); -} - -SSize_t -PerlStdIORead(struct IPerlStdIO* piPerl, void *buffer, Size_t size, Size_t count, FILE* pf) -{ - return win32_fread(buffer, size, count, pf); -} - -SSize_t -PerlStdIOWrite(struct IPerlStdIO* piPerl, const void *buffer, Size_t size, Size_t count, FILE* pf) -{ - return win32_fwrite(buffer, size, count, pf); -} - -void -PerlStdIOSetBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer) -{ - win32_setbuf(pf, buffer); -} - -int -PerlStdIOSetVBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer, int type, Size_t size) -{ - return win32_setvbuf(pf, buffer, type, size); -} - -void -PerlStdIOSetCnt(struct IPerlStdIO* piPerl, FILE* pf, int n) -{ -#ifdef STDIO_CNT_LVALUE - FILE *f = pf; - FILE_cnt(f) = n; -#endif -} - -void -PerlStdIOSetPtr(struct IPerlStdIO* piPerl, FILE* pf, char * ptr) -{ -#ifdef STDIO_PTR_LVALUE - FILE *f = pf; - FILE_ptr(f) = ptr; -#endif -} - -void -PerlStdIOSetlinebuf(struct IPerlStdIO* piPerl, FILE* pf) -{ - win32_setvbuf(pf, NULL, _IOLBF, 0); -} - -int -PerlStdIOPrintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format,...) -{ - va_list(arglist); - va_start(arglist, format); - return win32_vfprintf(pf, format, arglist); -} - -int -PerlStdIOVprintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format, va_list arglist) -{ - return win32_vfprintf(pf, format, arglist); -} - -Off_t -PerlStdIOTell(struct IPerlStdIO* piPerl, FILE* pf) -{ - return win32_ftell(pf); -} - -int -PerlStdIOSeek(struct IPerlStdIO* piPerl, FILE* pf, Off_t offset, int origin) -{ - return win32_fseek(pf, offset, origin); -} - -void -PerlStdIORewind(struct IPerlStdIO* piPerl, FILE* pf) -{ - win32_rewind(pf); -} - -FILE* -PerlStdIOTmpfile(struct IPerlStdIO* piPerl) -{ - return win32_tmpfile(); -} - -int -PerlStdIOGetpos(struct IPerlStdIO* piPerl, FILE* pf, Fpos_t *p) -{ - return win32_fgetpos(pf, p); -} - -int -PerlStdIOSetpos(struct IPerlStdIO* piPerl, FILE* pf, const Fpos_t *p) -{ - return win32_fsetpos(pf, p); -} -void -PerlStdIOInit(struct IPerlStdIO* piPerl) -{ -} - -void -PerlStdIOInitOSExtras(struct IPerlStdIO* piPerl) -{ - Perl_init_os_extras(); -} - -int -PerlStdIOOpenOSfhandle(struct IPerlStdIO* piPerl, intptr_t osfhandle, int flags) -{ - return win32_open_osfhandle(osfhandle, flags); -} - -intptr_t -PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum) -{ - return win32_get_osfhandle(filenum); -} - -FILE* -PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifndef UNDER_CE - FILE* pfdup; - fpos_t pos; - char mode[3]; - int fileno = win32_dup(win32_fileno(pf)); - - /* open the file in the same mode */ -#ifdef __BORLANDC__ - if((pf)->flags & _F_READ) { - mode[0] = 'r'; - mode[1] = 0; - } - else if((pf)->flags & _F_WRIT) { - mode[0] = 'a'; - mode[1] = 0; - } - else if((pf)->flags & _F_RDWR) { - mode[0] = 'r'; - mode[1] = '+'; - mode[2] = 0; - } -#else - if((pf)->_flag & _IOREAD) { - mode[0] = 'r'; - mode[1] = 0; - } - else if((pf)->_flag & _IOWRT) { - mode[0] = 'a'; - mode[1] = 0; - } - else if((pf)->_flag & _IORW) { - mode[0] = 'r'; - mode[1] = '+'; - mode[2] = 0; - } -#endif - - /* it appears that the binmode is attached to the - * file descriptor so binmode files will be handled - * correctly - */ - pfdup = win32_fdopen(fileno, mode); - - /* move the file pointer to the same position */ - if (!fgetpos(pf, &pos)) { - fsetpos(pfdup, &pos); - } - return pfdup; -#else - return 0; -#endif -} - -struct IPerlStdIO perlStdIO = -{ - PerlStdIOStdin, - PerlStdIOStdout, - PerlStdIOStderr, - PerlStdIOOpen, - PerlStdIOClose, - PerlStdIOEof, - PerlStdIOError, - PerlStdIOClearerr, - PerlStdIOGetc, - PerlStdIOGetBase, - PerlStdIOGetBufsiz, - PerlStdIOGetCnt, - PerlStdIOGetPtr, - PerlStdIOGets, - PerlStdIOPutc, - PerlStdIOPuts, - PerlStdIOFlush, - PerlStdIOUngetc, - PerlStdIOFileno, - PerlStdIOFdopen, - PerlStdIOReopen, - PerlStdIORead, - PerlStdIOWrite, - PerlStdIOSetBuf, - PerlStdIOSetVBuf, - PerlStdIOSetCnt, - PerlStdIOSetPtr, - PerlStdIOSetlinebuf, - PerlStdIOPrintf, - PerlStdIOVprintf, - PerlStdIOTell, - PerlStdIOSeek, - PerlStdIORewind, - PerlStdIOTmpfile, - PerlStdIOGetpos, - PerlStdIOSetpos, - PerlStdIOInit, - PerlStdIOInitOSExtras, - PerlStdIOFdupopen, -}; - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlLIO2Host(x) - -/* IPerlLIO */ -int -PerlLIOAccess(struct IPerlLIO* piPerl, const char *path, int mode) -{ - return win32_access(path, mode); -} - -int -PerlLIOChmod(struct IPerlLIO* piPerl, const char *filename, int pmode) -{ - return win32_chmod(filename, pmode); -} - -int -PerlLIOChown(struct IPerlLIO* piPerl, const char *filename, uid_t owner, gid_t group) -{ - return chown(filename, owner, group); -} - -int -PerlLIOChsize(struct IPerlLIO* piPerl, int handle, Off_t size) -{ - return win32_chsize(handle, size); -} - -int -PerlLIOClose(struct IPerlLIO* piPerl, int handle) -{ - return win32_close(handle); -} - -int -PerlLIODup(struct IPerlLIO* piPerl, int handle) -{ - return win32_dup(handle); -} - -int -PerlLIODup2(struct IPerlLIO* piPerl, int handle1, int handle2) -{ - return win32_dup2(handle1, handle2); -} - -int -PerlLIOFlock(struct IPerlLIO* piPerl, int fd, int oper) -{ - return win32_flock(fd, oper); -} - -int -PerlLIOFileStat(struct IPerlLIO* piPerl, int handle, Stat_t *buffer) -{ - return win32_fstat(handle, buffer); -} - -int -PerlLIOIOCtl(struct IPerlLIO* piPerl, int i, unsigned int u, char *data) -{ - return win32_ioctlsocket((SOCKET)i, (long)u, (u_long*)data); -} - -int -PerlLIOIsatty(struct IPerlLIO* piPerl, int fd) -{ - return isatty(fd); -} - -int -PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname) -{ - return win32_link(oldname, newname); -} - -Off_t -PerlLIOLseek(struct IPerlLIO* piPerl, int handle, Off_t offset, int origin) -{ - return win32_lseek(handle, offset, origin); -} - -int -PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, Stat_t *buffer) -{ - return win32_stat(path, buffer); -} - -char* -PerlLIOMktemp(struct IPerlLIO* piPerl, char *Template) -{ - return mktemp(Template); -} - -int -PerlLIOOpen(struct IPerlLIO* piPerl, const char *filename, int oflag) -{ - return win32_open(filename, oflag); -} - -int -PerlLIOOpen3(struct IPerlLIO* piPerl, const char *filename, int oflag, int pmode) -{ - return win32_open(filename, oflag, pmode); -} - -int -PerlLIORead(struct IPerlLIO* piPerl, int handle, void *buffer, unsigned int count) -{ - return win32_read(handle, buffer, count); -} - -int -PerlLIORename(struct IPerlLIO* piPerl, const char *OldFileName, const char *newname) -{ - return win32_rename(OldFileName, newname); -} - -int -PerlLIOSetmode(struct IPerlLIO* piPerl, int handle, int mode) -{ - return win32_setmode(handle, mode); -} - -int -PerlLIONameStat(struct IPerlLIO* piPerl, const char *path, Stat_t *buffer) -{ - return win32_stat(path, buffer); -} - -char* -PerlLIOTmpnam(struct IPerlLIO* piPerl, char *string) -{ - return tmpnam(string); -} - -int -PerlLIOUmask(struct IPerlLIO* piPerl, int pmode) -{ - return umask(pmode); -} - -int -PerlLIOUnlink(struct IPerlLIO* piPerl, const char *filename) -{ - return win32_unlink(filename); -} - -int -PerlLIOUtime(struct IPerlLIO* piPerl, const char *filename, struct utimbuf *times) -{ - return win32_utime(filename, times); -} - -int -PerlLIOWrite(struct IPerlLIO* piPerl, int handle, const void *buffer, unsigned int count) -{ - return win32_write(handle, buffer, count); -} - -struct IPerlLIO perlLIO = -{ - PerlLIOAccess, - PerlLIOChmod, - PerlLIOChown, - PerlLIOChsize, - PerlLIOClose, - PerlLIODup, - PerlLIODup2, - PerlLIOFlock, - PerlLIOFileStat, - PerlLIOIOCtl, - PerlLIOIsatty, - PerlLIOLink, - PerlLIOLseek, - PerlLIOLstat, - PerlLIOMktemp, - PerlLIOOpen, - PerlLIOOpen3, - PerlLIORead, - PerlLIORename, - PerlLIOSetmode, - PerlLIONameStat, - PerlLIOTmpnam, - PerlLIOUmask, - PerlLIOUnlink, - PerlLIOUtime, - PerlLIOWrite, -}; - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlDir2Host(x) - -/* IPerlDIR */ -int -PerlDirMakedir(struct IPerlDir* piPerl, const char *dirname, int mode) -{ - return win32_mkdir(dirname, mode); -} - -int -PerlDirChdir(struct IPerlDir* piPerl, const char *dirname) -{ - return IPERL2HOST(piPerl)->Chdir(dirname); -} - -int -PerlDirRmdir(struct IPerlDir* piPerl, const char *dirname) -{ - return win32_rmdir(dirname); -} - -int -PerlDirClose(struct IPerlDir* piPerl, DIR *dirp) -{ - return win32_closedir(dirp); -} - -DIR* -PerlDirOpen(struct IPerlDir* piPerl, const char *filename) -{ - return win32_opendir(filename); -} - -struct direct * -PerlDirRead(struct IPerlDir* piPerl, DIR *dirp) -{ - return win32_readdir(dirp); -} - -void -PerlDirRewind(struct IPerlDir* piPerl, DIR *dirp) -{ - win32_rewinddir(dirp); -} - -void -PerlDirSeek(struct IPerlDir* piPerl, DIR *dirp, long loc) -{ - win32_seekdir(dirp, loc); -} - -long -PerlDirTell(struct IPerlDir* piPerl, DIR *dirp) -{ - return win32_telldir(dirp); -} - -char* -PerlDirMapPathA(struct IPerlDir* piPerl, const char* path) -{ - return IPERL2HOST(piPerl)->MapPathA(path); -} - -WCHAR* -PerlDirMapPathW(struct IPerlDir* piPerl, const WCHAR* path) -{ - return IPERL2HOST(piPerl)->MapPathW(path); -} - -struct IPerlDir perlDir = -{ - PerlDirMakedir, - PerlDirChdir, - PerlDirRmdir, - PerlDirClose, - PerlDirOpen, - PerlDirRead, - PerlDirRewind, - PerlDirSeek, - PerlDirTell, - PerlDirMapPathA, - PerlDirMapPathW, -}; - - -/* IPerlSock */ -u_long -PerlSockHtonl(struct IPerlSock* piPerl, u_long hostlong) -{ - return win32_htonl(hostlong); -} - -u_short -PerlSockHtons(struct IPerlSock* piPerl, u_short hostshort) -{ - return win32_htons(hostshort); -} - -u_long -PerlSockNtohl(struct IPerlSock* piPerl, u_long netlong) -{ - return win32_ntohl(netlong); -} - -u_short -PerlSockNtohs(struct IPerlSock* piPerl, u_short netshort) -{ - return win32_ntohs(netshort); -} - -SOCKET PerlSockAccept(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* addr, int* addrlen) -{ - return win32_accept(s, addr, addrlen); -} - -int -PerlSockBind(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) -{ - return win32_bind(s, name, namelen); -} - -int -PerlSockConnect(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) -{ - return win32_connect(s, name, namelen); -} - -void -PerlSockEndhostent(struct IPerlSock* piPerl) -{ - win32_endhostent(); -} - -void -PerlSockEndnetent(struct IPerlSock* piPerl) -{ - win32_endnetent(); -} - -void -PerlSockEndprotoent(struct IPerlSock* piPerl) -{ - win32_endprotoent(); -} - -void -PerlSockEndservent(struct IPerlSock* piPerl) -{ - win32_endservent(); -} - -struct hostent* -PerlSockGethostbyaddr(struct IPerlSock* piPerl, const char* addr, int len, int type) -{ - return win32_gethostbyaddr(addr, len, type); -} - -struct hostent* -PerlSockGethostbyname(struct IPerlSock* piPerl, const char* name) -{ - return win32_gethostbyname(name); -} - -struct hostent* -PerlSockGethostent(struct IPerlSock* piPerl) -{ - dTHX; - Perl_croak(aTHX_ "gethostent not implemented!\n"); - return NULL; -} - -int -PerlSockGethostname(struct IPerlSock* piPerl, char* name, int namelen) -{ - return win32_gethostname(name, namelen); -} - -struct netent * -PerlSockGetnetbyaddr(struct IPerlSock* piPerl, long net, int type) -{ - return win32_getnetbyaddr(net, type); -} - -struct netent * -PerlSockGetnetbyname(struct IPerlSock* piPerl, const char *name) -{ - return win32_getnetbyname((char*)name); -} - -struct netent * -PerlSockGetnetent(struct IPerlSock* piPerl) -{ - return win32_getnetent(); -} - -int PerlSockGetpeername(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) -{ - return win32_getpeername(s, name, namelen); -} - -struct protoent* -PerlSockGetprotobyname(struct IPerlSock* piPerl, const char* name) -{ - return win32_getprotobyname(name); -} - -struct protoent* -PerlSockGetprotobynumber(struct IPerlSock* piPerl, int number) -{ - return win32_getprotobynumber(number); -} - -struct protoent* -PerlSockGetprotoent(struct IPerlSock* piPerl) -{ - return win32_getprotoent(); -} - -struct servent* -PerlSockGetservbyname(struct IPerlSock* piPerl, const char* name, const char* proto) -{ - return win32_getservbyname(name, proto); -} - -struct servent* -PerlSockGetservbyport(struct IPerlSock* piPerl, int port, const char* proto) -{ - return win32_getservbyport(port, proto); -} - -struct servent* -PerlSockGetservent(struct IPerlSock* piPerl) -{ - return win32_getservent(); -} - -int -PerlSockGetsockname(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) -{ - return win32_getsockname(s, name, namelen); -} - -int -PerlSockGetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, char* optval, int* optlen) -{ - return win32_getsockopt(s, level, optname, optval, optlen); -} - -unsigned long -PerlSockInetAddr(struct IPerlSock* piPerl, const char* cp) -{ - return win32_inet_addr(cp); -} - -char* -PerlSockInetNtoa(struct IPerlSock* piPerl, struct in_addr in) -{ - return win32_inet_ntoa(in); -} - -int -PerlSockListen(struct IPerlSock* piPerl, SOCKET s, int backlog) -{ - return win32_listen(s, backlog); -} - -int -PerlSockRecv(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags) -{ - return win32_recv(s, buffer, len, flags); -} - -int -PerlSockRecvfrom(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags, struct sockaddr* from, int* fromlen) -{ - return win32_recvfrom(s, buffer, len, flags, from, fromlen); -} - -int -PerlSockSelect(struct IPerlSock* piPerl, int nfds, char* readfds, char* writefds, char* exceptfds, const struct timeval* timeout) -{ - return win32_select(nfds, (Perl_fd_set*)readfds, (Perl_fd_set*)writefds, (Perl_fd_set*)exceptfds, timeout); -} - -int -PerlSockSend(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags) -{ - return win32_send(s, buffer, len, flags); -} - -int -PerlSockSendto(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags, const struct sockaddr* to, int tolen) -{ - return win32_sendto(s, buffer, len, flags, to, tolen); -} - -void -PerlSockSethostent(struct IPerlSock* piPerl, int stayopen) -{ - win32_sethostent(stayopen); -} - -void -PerlSockSetnetent(struct IPerlSock* piPerl, int stayopen) -{ - win32_setnetent(stayopen); -} - -void -PerlSockSetprotoent(struct IPerlSock* piPerl, int stayopen) -{ - win32_setprotoent(stayopen); -} - -void -PerlSockSetservent(struct IPerlSock* piPerl, int stayopen) -{ - win32_setservent(stayopen); -} - -int -PerlSockSetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, const char* optval, int optlen) -{ - return win32_setsockopt(s, level, optname, optval, optlen); -} - -int -PerlSockShutdown(struct IPerlSock* piPerl, SOCKET s, int how) -{ - return win32_shutdown(s, how); -} - -SOCKET -PerlSockSocket(struct IPerlSock* piPerl, int af, int type, int protocol) -{ - return win32_socket(af, type, protocol); -} - -int -PerlSockSocketpair(struct IPerlSock* piPerl, int domain, int type, int protocol, int* fds) -{ - return Perl_my_socketpair(domain, type, protocol, fds); -} - -int -PerlSockClosesocket(struct IPerlSock* piPerl, SOCKET s) -{ - return win32_closesocket(s); -} - -int -PerlSockIoctlsocket(struct IPerlSock* piPerl, SOCKET s, long cmd, u_long *argp) -{ - return win32_ioctlsocket(s, cmd, argp); -} - -struct IPerlSock perlSock = -{ - PerlSockHtonl, - PerlSockHtons, - PerlSockNtohl, - PerlSockNtohs, - PerlSockAccept, - PerlSockBind, - PerlSockConnect, - PerlSockEndhostent, - PerlSockEndnetent, - PerlSockEndprotoent, - PerlSockEndservent, - PerlSockGethostname, - PerlSockGetpeername, - PerlSockGethostbyaddr, - PerlSockGethostbyname, - PerlSockGethostent, - PerlSockGetnetbyaddr, - PerlSockGetnetbyname, - PerlSockGetnetent, - PerlSockGetprotobyname, - PerlSockGetprotobynumber, - PerlSockGetprotoent, - PerlSockGetservbyname, - PerlSockGetservbyport, - PerlSockGetservent, - PerlSockGetsockname, - PerlSockGetsockopt, - PerlSockInetAddr, - PerlSockInetNtoa, - PerlSockListen, - PerlSockRecv, - PerlSockRecvfrom, - PerlSockSelect, - PerlSockSend, - PerlSockSendto, - PerlSockSethostent, - PerlSockSetnetent, - PerlSockSetprotoent, - PerlSockSetservent, - PerlSockSetsockopt, - PerlSockShutdown, - PerlSockSocket, - PerlSockSocketpair, - PerlSockClosesocket, -}; - - -/* IPerlProc */ - -#define EXECF_EXEC 1 -#define EXECF_SPAWN 2 - -void -PerlProcAbort(struct IPerlProc* piPerl) -{ - win32_abort(); -} - -char * -PerlProcCrypt(struct IPerlProc* piPerl, const char* clear, const char* salt) -{ - return win32_crypt(clear, salt); -} - -void -PerlProcExit(struct IPerlProc* piPerl, int status) -{ - exit(status); -} - -void -PerlProc_Exit(struct IPerlProc* piPerl, int status) -{ - _exit(status); -} - -int -PerlProcExecl(struct IPerlProc* piPerl, const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3) -{ - return execl(cmdname, arg0, arg1, arg2, arg3); -} - -int -PerlProcExecv(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) -{ - return win32_execvp(cmdname, argv); -} - -int -PerlProcExecvp(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) -{ - return win32_execvp(cmdname, argv); -} - -uid_t -PerlProcGetuid(struct IPerlProc* piPerl) -{ - return getuid(); -} - -uid_t -PerlProcGeteuid(struct IPerlProc* piPerl) -{ - return geteuid(); -} - -gid_t -PerlProcGetgid(struct IPerlProc* piPerl) -{ - return getgid(); -} - -gid_t -PerlProcGetegid(struct IPerlProc* piPerl) -{ - return getegid(); -} - -char * -PerlProcGetlogin(struct IPerlProc* piPerl) -{ - return g_getlogin(); -} - -int -PerlProcKill(struct IPerlProc* piPerl, int pid, int sig) -{ - return win32_kill(pid, sig); -} - -int -PerlProcKillpg(struct IPerlProc* piPerl, int pid, int sig) -{ - dTHX; - Perl_croak(aTHX_ "killpg not implemented!\n"); - return 0; -} - -int -PerlProcPauseProc(struct IPerlProc* piPerl) -{ - return win32_sleep((32767L << 16) + 32767); -} - -PerlIO* -PerlProcPopen(struct IPerlProc* piPerl, const char *command, const char *mode) -{ - dTHX; - PERL_FLUSHALL_FOR_CHILD; - return win32_popen(command, mode); -} - -PerlIO* -PerlProcPopenList(struct IPerlProc* piPerl, const char *mode, IV narg, SV **args) -{ - dTHX; - PERL_FLUSHALL_FOR_CHILD; - return win32_popenlist(mode, narg, args); -} - -int -PerlProcPclose(struct IPerlProc* piPerl, PerlIO *stream) -{ - return win32_pclose(stream); -} - -int -PerlProcPipe(struct IPerlProc* piPerl, int *phandles) -{ - return win32_pipe(phandles, 512, O_BINARY); -} - -int -PerlProcSetuid(struct IPerlProc* piPerl, uid_t u) -{ - return setuid(u); -} - -int -PerlProcSetgid(struct IPerlProc* piPerl, gid_t g) -{ - return setgid(g); -} - -int -PerlProcSleep(struct IPerlProc* piPerl, unsigned int s) -{ - return win32_sleep(s); -} - -int -PerlProcTimes(struct IPerlProc* piPerl, struct tms *timebuf) -{ - return win32_times(timebuf); -} - -int -PerlProcWait(struct IPerlProc* piPerl, int *status) -{ - return win32_wait(status); -} - -int -PerlProcWaitpid(struct IPerlProc* piPerl, int pid, int *status, int flags) -{ - return win32_waitpid(pid, status, flags); -} - -Sighandler_t -PerlProcSignal(struct IPerlProc* piPerl, int sig, Sighandler_t subcode) -{ - return win32_signal(sig, subcode); -} - -int -PerlProcGetTimeOfDay(struct IPerlProc* piPerl, struct timeval *t, void *z) -{ - return win32_gettimeofday(t, z); -} - -#ifdef USE_ITHREADS -static THREAD_RET_TYPE -win32_start_child(LPVOID arg) -{ - PerlInterpreter *my_perl = (PerlInterpreter*)arg; - GV *tmpgv; - int status; -#ifdef PERL_SYNC_FORK - static long sync_fork_id = 0; - long id = ++sync_fork_id; -#endif - - - PERL_SET_THX(my_perl); - win32_checkTLS(my_perl); - - /* set $$ to pseudo id */ -#ifdef PERL_SYNC_FORK - w32_pseudo_id = id; -#else - w32_pseudo_id = GetCurrentThreadId(); - if (IsWin95()) { - int pid = (int)w32_pseudo_id; - if (pid < 0) - w32_pseudo_id = -pid; - } -#endif - if (tmpgv = gv_fetchpv("$", TRUE, SVt_PV)) { - SV *sv = GvSV(tmpgv); - SvREADONLY_off(sv); - sv_setiv(sv, -(IV)w32_pseudo_id); - SvREADONLY_on(sv); - } - hv_clear(PL_pidstatus); - - /* push a zero on the stack (we are the child) */ - { - dSP; - dTARGET; - PUSHi(0); - PUTBACK; - } - - /* continue from next op */ - PL_op = PL_op->op_next; - - { - dJMPENV; - volatile int oldscope = PL_scopestack_ix; - -restart: - JMPENV_PUSH(status); - switch (status) { - case 0: - CALLRUNOPS(aTHX); - status = 0; - break; - case 2: - while (PL_scopestack_ix > oldscope) - LEAVE; - FREETMPS; - PL_curstash = PL_defstash; - if (PL_endav && !PL_minus_c) - call_list(oldscope, PL_endav); - status = STATUS_EXIT; - break; - case 3: - if (PL_restartop) { - POPSTACK_TO(PL_mainstack); - PL_op = PL_restartop; - PL_restartop = Nullop; - goto restart; - } - PerlIO_printf(Perl_error_log, "panic: restartop\n"); - FREETMPS; - status = 1; - break; - } - JMPENV_POP; - - /* XXX hack to avoid perl_destruct() freeing optree */ - win32_checkTLS(my_perl); - PL_main_root = Nullop; - } - - win32_checkTLS(my_perl); - /* close the std handles to avoid fd leaks */ - { - do_close(PL_stdingv, FALSE); - do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), FALSE); /* PL_stdoutgv - ISAGN */ - do_close(PL_stderrgv, FALSE); - } - - /* destroy everything (waits for any pseudo-forked children) */ - win32_checkTLS(my_perl); - perl_destruct(my_perl); - win32_checkTLS(my_perl); - perl_free(my_perl); - -#ifdef PERL_SYNC_FORK - return id; -#else - return (DWORD)status; -#endif -} -#endif /* USE_ITHREADS */ - -int -PerlProcFork(struct IPerlProc* piPerl) -{ - dTHX; -#ifdef USE_ITHREADS - DWORD id; - HANDLE handle; - CPerlHost *h; - - if (w32_num_pseudo_children >= MAXIMUM_WAIT_OBJECTS) { - errno = EAGAIN; - return -1; - } - h = new CPerlHost(*(CPerlHost*)w32_internal_host); - PerlInterpreter *new_perl = perl_clone_using((PerlInterpreter*)aTHX, 1, - h->m_pHostperlMem, - h->m_pHostperlMemShared, - h->m_pHostperlMemParse, - h->m_pHostperlEnv, - h->m_pHostperlStdIO, - h->m_pHostperlLIO, - h->m_pHostperlDir, - h->m_pHostperlSock, - h->m_pHostperlProc - ); - new_perl->Isys_intern.internal_host = h; - h->host_perl = new_perl; -# ifdef PERL_SYNC_FORK - id = win32_start_child((LPVOID)new_perl); - PERL_SET_THX(aTHX); -# else -# ifdef USE_RTL_THREAD_API - handle = (HANDLE)_beginthreadex((void*)NULL, 0, win32_start_child, - (void*)new_perl, 0, (unsigned*)&id); -# else - handle = CreateThread(NULL, 0, win32_start_child, - (LPVOID)new_perl, 0, &id); -# endif - PERL_SET_THX(aTHX); /* XXX perl_clone*() set TLS */ - if (!handle) { - errno = EAGAIN; - return -1; - } - if (IsWin95()) { - int pid = (int)id; - if (pid < 0) - id = -pid; - } - w32_pseudo_child_handles[w32_num_pseudo_children] = handle; - w32_pseudo_child_pids[w32_num_pseudo_children] = id; - ++w32_num_pseudo_children; -# endif - return -(int)id; -#else - Perl_croak(aTHX_ "fork() not implemented!\n"); - return -1; -#endif /* USE_ITHREADS */ -} - -int -PerlProcGetpid(struct IPerlProc* piPerl) -{ - return win32_getpid(); -} - -void* -PerlProcDynaLoader(struct IPerlProc* piPerl, const char* filename) -{ - return win32_dynaload(filename); -} - -void -PerlProcGetOSError(struct IPerlProc* piPerl, SV* sv, DWORD dwErr) -{ - win32_str_os_error(sv, dwErr); -} - -int -PerlProcSpawnvp(struct IPerlProc* piPerl, int mode, const char *cmdname, const char *const *argv) -{ - return win32_spawnvp(mode, cmdname, argv); -} - -int -PerlProcLastHost(struct IPerlProc* piPerl) -{ - dTHX; - CPerlHost *h = (CPerlHost*)w32_internal_host; - return h->LastHost(); -} - -struct IPerlProc perlProc = -{ - PerlProcAbort, - PerlProcCrypt, - PerlProcExit, - PerlProc_Exit, - PerlProcExecl, - PerlProcExecv, - PerlProcExecvp, - PerlProcGetuid, - PerlProcGeteuid, - PerlProcGetgid, - PerlProcGetegid, - PerlProcGetlogin, - PerlProcKill, - PerlProcKillpg, - PerlProcPauseProc, - PerlProcPopen, - PerlProcPclose, - PerlProcPipe, - PerlProcSetuid, - PerlProcSetgid, - PerlProcSleep, - PerlProcTimes, - PerlProcWait, - PerlProcWaitpid, - PerlProcSignal, - PerlProcFork, - PerlProcGetpid, - PerlProcDynaLoader, - PerlProcGetOSError, - PerlProcSpawnvp, - PerlProcLastHost, - PerlProcPopenList, - PerlProcGetTimeOfDay -}; - - -/* - * CPerlHost - */ - -CPerlHost::CPerlHost(void) -{ - /* Construct a host from scratch */ - InterlockedIncrement(&num_hosts); - m_pvDir = new VDir(); - m_pVMem = new VMem(); - m_pVMemShared = new VMem(); - m_pVMemParse = new VMem(); - - m_pvDir->Init(NULL, m_pVMem); - - m_dwEnvCount = 0; - m_lppEnvList = NULL; - m_bTopLevel = TRUE; - - CopyMemory(&m_hostperlMem, &perlMem, sizeof(perlMem)); - CopyMemory(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared)); - CopyMemory(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse)); - CopyMemory(&m_hostperlEnv, &perlEnv, sizeof(perlEnv)); - CopyMemory(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO)); - CopyMemory(&m_hostperlLIO, &perlLIO, sizeof(perlLIO)); - CopyMemory(&m_hostperlDir, &perlDir, sizeof(perlDir)); - CopyMemory(&m_hostperlSock, &perlSock, sizeof(perlSock)); - CopyMemory(&m_hostperlProc, &perlProc, sizeof(perlProc)); - - m_pHostperlMem = &m_hostperlMem; - m_pHostperlMemShared = &m_hostperlMemShared; - m_pHostperlMemParse = &m_hostperlMemParse; - m_pHostperlEnv = &m_hostperlEnv; - m_pHostperlStdIO = &m_hostperlStdIO; - m_pHostperlLIO = &m_hostperlLIO; - m_pHostperlDir = &m_hostperlDir; - m_pHostperlSock = &m_hostperlSock; - m_pHostperlProc = &m_hostperlProc; -} - -#define SETUPEXCHANGE(xptr, iptr, table) \ - STMT_START { \ - if (xptr) { \ - iptr = *xptr; \ - *xptr = &table; \ - } \ - else { \ - iptr = &table; \ - } \ - } STMT_END - -CPerlHost::CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc) -{ - InterlockedIncrement(&num_hosts); - m_pvDir = new VDir(0); - m_pVMem = new VMem(); - m_pVMemShared = new VMem(); - m_pVMemParse = new VMem(); - - m_pvDir->Init(NULL, m_pVMem); - - m_dwEnvCount = 0; - m_lppEnvList = NULL; - m_bTopLevel = FALSE; - - CopyMemory(&m_hostperlMem, &perlMem, sizeof(perlMem)); - CopyMemory(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared)); - CopyMemory(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse)); - CopyMemory(&m_hostperlEnv, &perlEnv, sizeof(perlEnv)); - CopyMemory(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO)); - CopyMemory(&m_hostperlLIO, &perlLIO, sizeof(perlLIO)); - CopyMemory(&m_hostperlDir, &perlDir, sizeof(perlDir)); - CopyMemory(&m_hostperlSock, &perlSock, sizeof(perlSock)); - CopyMemory(&m_hostperlProc, &perlProc, sizeof(perlProc)); - - SETUPEXCHANGE(ppMem, m_pHostperlMem, m_hostperlMem); - SETUPEXCHANGE(ppMemShared, m_pHostperlMemShared, m_hostperlMemShared); - SETUPEXCHANGE(ppMemParse, m_pHostperlMemParse, m_hostperlMemParse); - SETUPEXCHANGE(ppEnv, m_pHostperlEnv, m_hostperlEnv); - SETUPEXCHANGE(ppStdIO, m_pHostperlStdIO, m_hostperlStdIO); - SETUPEXCHANGE(ppLIO, m_pHostperlLIO, m_hostperlLIO); - SETUPEXCHANGE(ppDir, m_pHostperlDir, m_hostperlDir); - SETUPEXCHANGE(ppSock, m_pHostperlSock, m_hostperlSock); - SETUPEXCHANGE(ppProc, m_pHostperlProc, m_hostperlProc); -} -#undef SETUPEXCHANGE - -CPerlHost::CPerlHost(CPerlHost& host) -{ - /* Construct a host from another host */ - InterlockedIncrement(&num_hosts); - m_pVMem = new VMem(); - m_pVMemShared = host.GetMemShared(); - m_pVMemParse = host.GetMemParse(); - - /* duplicate directory info */ - m_pvDir = new VDir(0); - m_pvDir->Init(host.GetDir(), m_pVMem); - - CopyMemory(&m_hostperlMem, &perlMem, sizeof(perlMem)); - CopyMemory(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared)); - CopyMemory(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse)); - CopyMemory(&m_hostperlEnv, &perlEnv, sizeof(perlEnv)); - CopyMemory(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO)); - CopyMemory(&m_hostperlLIO, &perlLIO, sizeof(perlLIO)); - CopyMemory(&m_hostperlDir, &perlDir, sizeof(perlDir)); - CopyMemory(&m_hostperlSock, &perlSock, sizeof(perlSock)); - CopyMemory(&m_hostperlProc, &perlProc, sizeof(perlProc)); - m_pHostperlMem = &m_hostperlMem; - m_pHostperlMemShared = &m_hostperlMemShared; - m_pHostperlMemParse = &m_hostperlMemParse; - m_pHostperlEnv = &m_hostperlEnv; - m_pHostperlStdIO = &m_hostperlStdIO; - m_pHostperlLIO = &m_hostperlLIO; - m_pHostperlDir = &m_hostperlDir; - m_pHostperlSock = &m_hostperlSock; - m_pHostperlProc = &m_hostperlProc; - - m_dwEnvCount = 0; - m_lppEnvList = NULL; - m_bTopLevel = FALSE; - - /* duplicate environment info */ - LPSTR lpPtr; - DWORD dwIndex = 0; - while(lpPtr = host.GetIndex(dwIndex)) - Add(lpPtr); -} - -CPerlHost::~CPerlHost(void) -{ - Reset(); - InterlockedDecrement(&num_hosts); - delete m_pvDir; - m_pVMemParse->Release(); - m_pVMemShared->Release(); - m_pVMem->Release(); -} - -LPSTR -CPerlHost::Find(LPCSTR lpStr) -{ - LPSTR lpPtr; - LPSTR* lppPtr = Lookup(lpStr); - if(lppPtr != NULL) { - for(lpPtr = *lppPtr; *lpPtr != '\0' && *lpPtr != '='; ++lpPtr) - ; - - if(*lpPtr == '=') - ++lpPtr; - - return lpPtr; - } - return NULL; -} - -int -lookup(const void *arg1, const void *arg2) -{ // Compare strings - char*ptr1, *ptr2; - char c1,c2; - - ptr1 = *(char**)arg1; - ptr2 = *(char**)arg2; - for(;;) { - c1 = *ptr1++; - c2 = *ptr2++; - if(c1 == '\0' || c1 == '=') { - if(c2 == '\0' || c2 == '=') - break; - - return -1; // string 1 < string 2 - } - else if(c2 == '\0' || c2 == '=') - return 1; // string 1 > string 2 - else if(c1 != c2) { - c1 = toupper(c1); - c2 = toupper(c2); - if(c1 != c2) { - if(c1 < c2) - return -1; // string 1 < string 2 - - return 1; // string 1 > string 2 - } - } - } - return 0; -} - -LPSTR* -CPerlHost::Lookup(LPCSTR lpStr) -{ -#ifdef UNDER_CE - if (!m_lppEnvList || !m_dwEnvCount) - return NULL; -#endif - if (!lpStr) - return NULL; - return (LPSTR*)bsearch(&lpStr, m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), lookup); -} - -int -compare(const void *arg1, const void *arg2) -{ // Compare strings - char*ptr1, *ptr2; - char c1,c2; - - ptr1 = *(char**)arg1; - ptr2 = *(char**)arg2; - for(;;) { - c1 = *ptr1++; - c2 = *ptr2++; - if(c1 == '\0' || c1 == '=') { - if(c1 == c2) - break; - - return -1; // string 1 < string 2 - } - else if(c2 == '\0' || c2 == '=') - return 1; // string 1 > string 2 - else if(c1 != c2) { - c1 = toupper(c1); - c2 = toupper(c2); - if(c1 != c2) { - if(c1 < c2) - return -1; // string 1 < string 2 - - return 1; // string 1 > string 2 - } - } - } - return 0; -} - -void -CPerlHost::Add(LPCSTR lpStr) -{ - dTHX; - char szBuffer[1024]; - LPSTR *lpPtr; - int index, length = strlen(lpStr)+1; - - for(index = 0; lpStr[index] != '\0' && lpStr[index] != '='; ++index) - szBuffer[index] = lpStr[index]; - - szBuffer[index] = '\0'; - - // replacing ? - lpPtr = Lookup(szBuffer); - if (lpPtr != NULL) { - // must allocate things via host memory allocation functions - // rather than perl's Renew() et al, as the perl interpreter - // may either not be initialized enough when we allocate these, - // or may already be dead when we go to free these - *lpPtr = (char*)Realloc(*lpPtr, length * sizeof(char)); - strcpy(*lpPtr, lpStr); - } - else { - m_lppEnvList = (LPSTR*)Realloc(m_lppEnvList, (m_dwEnvCount+1) * sizeof(LPSTR)); - if (m_lppEnvList) { - m_lppEnvList[m_dwEnvCount] = (char*)Malloc(length * sizeof(char)); - if (m_lppEnvList[m_dwEnvCount] != NULL) { - strcpy(m_lppEnvList[m_dwEnvCount], lpStr); - ++m_dwEnvCount; - qsort(m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), compare); - } - } - } -} - -DWORD -CPerlHost::CalculateEnvironmentSpace(void) -{ - DWORD index; - DWORD dwSize = 0; - for(index = 0; index < m_dwEnvCount; ++index) - dwSize += strlen(m_lppEnvList[index]) + 1; - - return dwSize; -} - -void -CPerlHost::FreeLocalEnvironmentStrings(LPSTR lpStr) -{ - dTHX; - Safefree(lpStr); -} - -char* -CPerlHost::GetChildDir(void) -{ - dTHX; - int length; - char* ptr; - Newx(ptr, MAX_PATH+1, char); - if(ptr) { - m_pvDir->GetCurrentDirectoryA(MAX_PATH+1, ptr); - length = strlen(ptr); - if (length > 3) { - if ((ptr[length-1] == '\\') || (ptr[length-1] == '/')) - ptr[length-1] = 0; - } - } - return ptr; -} - -void -CPerlHost::FreeChildDir(char* pStr) -{ - dTHX; - Safefree(pStr); -} - -LPSTR -CPerlHost::CreateLocalEnvironmentStrings(VDir &vDir) -{ - dTHX; - LPSTR lpStr, lpPtr, lpEnvPtr, lpTmp, lpLocalEnv, lpAllocPtr; - DWORD dwSize, dwEnvIndex; - int nLength, compVal; - - // get the process environment strings - lpAllocPtr = lpTmp = (LPSTR)GetEnvironmentStrings(); - - // step over current directory stuff - while(*lpTmp == '=') - lpTmp += strlen(lpTmp) + 1; - - // save the start of the environment strings - lpEnvPtr = lpTmp; - for(dwSize = 1; *lpTmp != '\0'; lpTmp += strlen(lpTmp) + 1) { - // calculate the size of the environment strings - dwSize += strlen(lpTmp) + 1; - } - - // add the size of current directories - dwSize += vDir.CalculateEnvironmentSpace(); - - // add the additional space used by changes made to the environment - dwSize += CalculateEnvironmentSpace(); - - Newx(lpStr, dwSize, char); - lpPtr = lpStr; - if(lpStr != NULL) { - // build the local environment - lpStr = vDir.BuildEnvironmentSpace(lpStr); - - dwEnvIndex = 0; - lpLocalEnv = GetIndex(dwEnvIndex); - while(*lpEnvPtr != '\0') { - if(!lpLocalEnv) { - // all environment overrides have been added - // so copy string into place - strcpy(lpStr, lpEnvPtr); - nLength = strlen(lpEnvPtr) + 1; - lpStr += nLength; - lpEnvPtr += nLength; - } - else { - // determine which string to copy next - compVal = compare(&lpEnvPtr, &lpLocalEnv); - if(compVal < 0) { - strcpy(lpStr, lpEnvPtr); - nLength = strlen(lpEnvPtr) + 1; - lpStr += nLength; - lpEnvPtr += nLength; - } - else { - char *ptr = strchr(lpLocalEnv, '='); - if(ptr && ptr[1]) { - strcpy(lpStr, lpLocalEnv); - lpStr += strlen(lpLocalEnv) + 1; - } - lpLocalEnv = GetIndex(dwEnvIndex); - if(compVal == 0) { - // this string was replaced - lpEnvPtr += strlen(lpEnvPtr) + 1; - } - } - } - } - - while(lpLocalEnv) { - // still have environment overrides to add - // so copy the strings into place if not an override - char *ptr = strchr(lpLocalEnv, '='); - if(ptr && ptr[1]) { - strcpy(lpStr, lpLocalEnv); - lpStr += strlen(lpLocalEnv) + 1; - } - lpLocalEnv = GetIndex(dwEnvIndex); - } - - // add final NULL - *lpStr = '\0'; - } - - // release the process environment strings - FreeEnvironmentStrings(lpAllocPtr); - - return lpPtr; -} - -void -CPerlHost::Reset(void) -{ - dTHX; - if(m_lppEnvList != NULL) { - for(DWORD index = 0; index < m_dwEnvCount; ++index) { - Free(m_lppEnvList[index]); - m_lppEnvList[index] = NULL; - } - } - m_dwEnvCount = 0; - Free(m_lppEnvList); - m_lppEnvList = NULL; -} - -void -CPerlHost::Clearenv(void) -{ - dTHX; - char ch; - LPSTR lpPtr, lpStr, lpEnvPtr; - if (m_lppEnvList != NULL) { - /* set every entry to an empty string */ - for(DWORD index = 0; index < m_dwEnvCount; ++index) { - char* ptr = strchr(m_lppEnvList[index], '='); - if(ptr) { - *++ptr = 0; - } - } - } - - /* get the process environment strings */ - lpStr = lpEnvPtr = (LPSTR)GetEnvironmentStrings(); - - /* step over current directory stuff */ - while(*lpStr == '=') - lpStr += strlen(lpStr) + 1; - - while(*lpStr) { - lpPtr = strchr(lpStr, '='); - if(lpPtr) { - ch = *++lpPtr; - *lpPtr = 0; - Add(lpStr); - if (m_bTopLevel) - (void)win32_putenv(lpStr); - *lpPtr = ch; - } - lpStr += strlen(lpStr) + 1; - } - - FreeEnvironmentStrings(lpEnvPtr); -} - - -char* -CPerlHost::Getenv(const char *varname) -{ - dTHX; - if (!m_bTopLevel) { - char *pEnv = Find(varname); - if (pEnv && *pEnv) - return pEnv; - } - return win32_getenv(varname); -} - -int -CPerlHost::Putenv(const char *envstring) -{ - dTHX; - Add(envstring); - if (m_bTopLevel) - return win32_putenv(envstring); - - return 0; -} - -int -CPerlHost::Chdir(const char *dirname) -{ - dTHX; - int ret; - if (!dirname) { - errno = ENOENT; - return -1; - } - ret = m_pvDir->SetCurrentDirectoryA((char*)dirname); - if(ret < 0) { - errno = ENOENT; - } - return ret; -} - -#endif /* ___PerlHost_H___ */ diff --git a/wince/perllib.c b/wince/perllib.c deleted file mode 100644 index 0b00246438..0000000000 --- a/wince/perllib.c +++ /dev/null @@ -1,326 +0,0 @@ -/* Time-stamp: <01/08/01 20:58:55 keuchel@w2k> */ - -#include "EXTERN.h" -#include "perl.h" - -#include "XSUB.h" - -#ifdef PERL_IMPLICIT_SYS -#include "win32iop.h" -#include <fcntl.h> -#endif /* PERL_IMPLICIT_SYS */ - - -/* Register any extra external extensions */ -char *staticlinkmodules[] = { - "DynaLoader", - NULL, -}; - -EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); - -static void -xs_init(pTHX) -{ - char *file = __FILE__; - dXSUB_SYS; - newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); -} - -#ifdef PERL_IMPLICIT_SYS - -extern "C" void win32_checkTLS(PerlInterpreter *host_perl); -void -win32_checkTLS(PerlInterpreter *host_perl) -{ - dTHX; - if (host_perl != my_perl) { - printf(" ... bad in win32_checkTLS\n"); - printf(" %08X ne %08X\n",host_perl,my_perl); - int *nowhere = NULL; - *nowhere = 0; - abort(); - } -} - -#ifdef UNDER_CE -int GetLogicalDrives() { - return 0; /* no logical drives on CE */ -} -int GetLogicalDriveStrings(int size, char addr[]) { - return 0; /* no logical drives on CE */ -} -/* TBD */ -DWORD GetFullPathNameA(LPCSTR fn, DWORD blen, LPTSTR buf, LPSTR *pfile) { - return 0; -} -/* TBD */ -DWORD GetFullPathNameW(CONST WCHAR *fn, DWORD blen, WCHAR * buf, WCHAR **pfile) { - return 0; -} -/* TBD */ -DWORD SetCurrentDirectoryA(LPSTR pPath) { - return 0; -} -/* TBD */ -DWORD SetCurrentDirectoryW(CONST WCHAR *pPath) { - return 0; -} -int xcesetuid(uid_t id){return 0;} -int xceseteuid(uid_t id){ return 0;} -int xcegetuid() {return 0;} -int xcegeteuid(){ return 0;} -#endif - -#include "perlhost.h" - -EXTERN_C void -perl_get_host_info(struct IPerlMemInfo* perlMemInfo, - struct IPerlMemInfo* perlMemSharedInfo, - struct IPerlMemInfo* perlMemParseInfo, - struct IPerlEnvInfo* perlEnvInfo, - struct IPerlStdIOInfo* perlStdIOInfo, - struct IPerlLIOInfo* perlLIOInfo, - struct IPerlDirInfo* perlDirInfo, - struct IPerlSockInfo* perlSockInfo, - struct IPerlProcInfo* perlProcInfo) -{ - if (perlMemInfo) { - Copy(&perlMem, &perlMemInfo->perlMemList, perlMemInfo->nCount, void*); - perlMemInfo->nCount = (sizeof(struct IPerlMem)/sizeof(void*)); - } - if (perlMemSharedInfo) { - Copy(&perlMem, &perlMemSharedInfo->perlMemList, perlMemSharedInfo->nCount, void*); - perlMemSharedInfo->nCount = (sizeof(struct IPerlMem)/sizeof(void*)); - } - if (perlMemParseInfo) { - Copy(&perlMem, &perlMemParseInfo->perlMemList, perlMemParseInfo->nCount, void*); - perlMemParseInfo->nCount = (sizeof(struct IPerlMem)/sizeof(void*)); - } - if (perlEnvInfo) { - Copy(&perlEnv, &perlEnvInfo->perlEnvList, perlEnvInfo->nCount, void*); - perlEnvInfo->nCount = (sizeof(struct IPerlEnv)/sizeof(void*)); - } - if (perlStdIOInfo) { - Copy(&perlStdIO, &perlStdIOInfo->perlStdIOList, perlStdIOInfo->nCount, void*); - perlStdIOInfo->nCount = (sizeof(struct IPerlStdIO)/sizeof(void*)); - } - if (perlLIOInfo) { - Copy(&perlLIO, &perlLIOInfo->perlLIOList, perlLIOInfo->nCount, void*); - perlLIOInfo->nCount = (sizeof(struct IPerlLIO)/sizeof(void*)); - } - if (perlDirInfo) { - Copy(&perlDir, &perlDirInfo->perlDirList, perlDirInfo->nCount, void*); - perlDirInfo->nCount = (sizeof(struct IPerlDir)/sizeof(void*)); - } - if (perlSockInfo) { - Copy(&perlSock, &perlSockInfo->perlSockList, perlSockInfo->nCount, void*); - perlSockInfo->nCount = (sizeof(struct IPerlSock)/sizeof(void*)); - } - if (perlProcInfo) { - Copy(&perlProc, &perlProcInfo->perlProcList, perlProcInfo->nCount, void*); - perlProcInfo->nCount = (sizeof(struct IPerlProc)/sizeof(void*)); - } -} - -EXTERN_C PerlInterpreter* -perl_alloc_override(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc) -{ - PerlInterpreter *my_perl = NULL; - CPerlHost* pHost = new CPerlHost(ppMem, ppMemShared, ppMemParse, ppEnv, - ppStdIO, ppLIO, ppDir, ppSock, ppProc); - - if (pHost) { - my_perl = perl_alloc_using(pHost->m_pHostperlMem, - pHost->m_pHostperlMemShared, - pHost->m_pHostperlMemParse, - pHost->m_pHostperlEnv, - pHost->m_pHostperlStdIO, - pHost->m_pHostperlLIO, - pHost->m_pHostperlDir, - pHost->m_pHostperlSock, - pHost->m_pHostperlProc); - if (my_perl) { - w32_internal_host = pHost; - } - } - return my_perl; -} - -EXTERN_C PerlInterpreter* -perl_alloc(void) -{ - PerlInterpreter* my_perl = NULL; - CPerlHost* pHost = new CPerlHost(); - if (pHost) { - my_perl = perl_alloc_using(pHost->m_pHostperlMem, - pHost->m_pHostperlMemShared, - pHost->m_pHostperlMemParse, - pHost->m_pHostperlEnv, - pHost->m_pHostperlStdIO, - pHost->m_pHostperlLIO, - pHost->m_pHostperlDir, - pHost->m_pHostperlSock, - pHost->m_pHostperlProc); - if (my_perl) { - w32_internal_host = pHost; - } - } - pHost->host_perl = my_perl; /* FIXME this statement shouldn't be here */ - return my_perl; -} - -EXTERN_C void -win32_delete_internal_host(void *h) -{ - CPerlHost *host = (CPerlHost*)h; - delete host; -} - -#endif /* PERL_IMPLICIT_SYS */ - -EXTERN_C HANDLE w32_perldll_handle; - -EXTERN_C DllExport int -RunPerl(int argc, char **argv, char **env) -{ - int exitstatus; - PerlInterpreter *my_perl, *new_perl = NULL; - -#ifndef __BORLANDC__ - /* XXX this _may_ be a problem on some compilers (e.g. Borland) that - * want to free() argv after main() returns. As luck would have it, - * Borland's CRT does the right thing to argv[0] already. */ - char szModuleName[MAX_PATH]; - char *ptr; - - XCEGetModuleFileNameA(NULL, szModuleName, sizeof(szModuleName)); - (void)win32_longpath(szModuleName); - argv[0] = szModuleName; -#endif - -#ifdef PERL_GLOBAL_STRUCT -#define PERLVAR(var,type) /**/ -#define PERLVARA(var,type) /**/ -#define PERLVARI(var,type,init) PL_Vars.var = init; -#define PERLVARIC(var,type,init) PL_Vars.var = init; -#include "perlvars.h" -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC -#endif - - PERL_SYS_INIT(&argc,&argv); - - if (!(my_perl = perl_alloc())) - return (1); - perl_construct(my_perl); - PL_perl_destruct_level = 0; - - exitstatus = perl_parse(my_perl, xs_init, argc, argv, env); - if (!exitstatus) { -#if defined(TOP_CLONE) && defined(USE_ITHREADS) /* XXXXXX testing */ - new_perl = perl_clone(my_perl, 1); - exitstatus = perl_run(new_perl); - PERL_SET_THX(my_perl); -#else - exitstatus = perl_run(my_perl); -#endif - } - - perl_destruct(my_perl); - perl_free(my_perl); -#ifdef USE_ITHREADS - if (new_perl) { - PERL_SET_THX(new_perl); - perl_destruct(new_perl); - perl_free(new_perl); - } -#endif - - PERL_SYS_TERM(); - - return (exitstatus); -} - -EXTERN_C void -set_w32_module_name(void); - -#ifdef __MINGW32__ -EXTERN_C /* GCC in C++ mode mangles the name, otherwise */ -#endif -BOOL APIENTRY -DllMain(HANDLE hModule, /* DLL module handle */ - DWORD fdwReason, /* reason called */ - LPVOID lpvReserved) /* reserved */ -{ - switch (fdwReason) { - /* The DLL is attaching to a process due to process - * initialization or a call to LoadLibrary. - */ - case DLL_PROCESS_ATTACH: -/* #define DEFAULT_BINMODE */ -#ifdef DEFAULT_BINMODE - setmode( fileno( stdin ), O_BINARY ); - setmode( fileno( stdout ), O_BINARY ); - setmode( fileno( stderr ), O_BINARY ); - _fmode = O_BINARY; -#endif - -#ifndef UNDER_CE - DisableThreadLibraryCalls((HMODULE)hModule); -#endif - - w32_perldll_handle = hModule; - set_w32_module_name(); - break; - - /* The DLL is detaching from a process due to - * process termination or call to FreeLibrary. - */ - case DLL_PROCESS_DETACH: - break; - - /* The attached process creates a new thread. */ - case DLL_THREAD_ATTACH: - break; - - /* The thread of the attached process terminates. */ - case DLL_THREAD_DETACH: - break; - - default: - break; - } - return TRUE; -} - - -#if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS) -EXTERN_C PerlInterpreter * -perl_clone_host(PerlInterpreter* proto_perl, UV flags) { - dTHX; - CPerlHost *h; - h = new CPerlHost(*(CPerlHost*)PL_sys_intern.internal_host); - proto_perl = perl_clone_using(proto_perl, flags, - h->m_pHostperlMem, - h->m_pHostperlMemShared, - h->m_pHostperlMemParse, - h->m_pHostperlEnv, - h->m_pHostperlStdIO, - h->m_pHostperlLIO, - h->m_pHostperlDir, - h->m_pHostperlSock, - h->m_pHostperlProc - ); - proto_perl->Isys_intern.internal_host = h; - h->host_perl = proto_perl; - return proto_perl; - -} -#endif diff --git a/wince/perlmain.c b/wince/perlmain.c deleted file mode 100644 index ced3b86cc0..0000000000 --- a/wince/perlmain.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Time-stamp: <01/08/01 20:58:19 keuchel@w2k> */ - -#include "EXTERN.h" -#include "perl.h" - -#ifdef __GNUC__ - -/* Mingw32 defaults to globing command line - * This is inconsistent with other Win32 ports and - * seems to cause trouble with passing -DXSVERSION=\"1.6\" - * So we turn it off like this: - */ -int _CRT_glob = 0; - -#endif - -/* Called from w32console/wmain.c */ - -extern int w32console_usefunctionkeys; - -int -main(int argc, char **argv, char **env) -{ - int res; - - if(argc == 1) - XCEShowMessageA("Starting perl with no args is currently\r\n" - "not useful on Windows CE"); - - w32console_usefunctionkeys = 0; /* this allows backspace key to work */ - - res = RunPerl(argc, argv, env); - - if(res != 0) - XCEShowMessageA("Exitcode: %d", res); - - return res; -} - - diff --git a/wince/registry.bat b/wince/registry.bat deleted file mode 100755 index 0fd58c3d3c..0000000000 --- a/wince/registry.bat +++ /dev/null @@ -1,28 +0,0 @@ -@echo off - -::- This script must be executed on the PC with an ActiveSync -::- connection. If it does not work, create the entries with -::- a remote registry editor or get a registry editor for your -::- devices. -::- -::- You need my cereg.exe program. - -::- My paths... -set perlexe=\speicherkarte2\bin\perl.exe -set perllib=\speicherkarte2\usr\lib\perl5 - -::- PERL5LIB -cereg -k "HKLM\Environment" -n "PERL5LIB" -v "%perllib%" - -::- For ShellExecute -cereg -k "HKCR\.pl" -n "" -v "perlfile" -cereg -k "HKCR\perlfile" -n "" -v "Perl Script" -cereg -k "HKCR\perlfile\DefaultIcon" -n "" -v "%perlexe%,-1" - -::- You might need to fix the quotes if your paths contain spaces! -cereg -k "HKCR\perlfile\Shell\open\command" -n "" -v "%perlexe% %%1" - -cereg -k "HKLM\Environment" -n "ROWS" -v "10" -cereg -k "HKLM\Environment" -n "COLS" -v "75" -cereg -k "HKLM\Environment" -n "PATH" -v "/Speicherkarte2/bin" -cereg -k "HKLM\Environment" -n "UNIXROOTDIR" -v "/Speicherkarte2" diff --git a/wince/runperl.c b/wince/runperl.c deleted file mode 100644 index 85fd831759..0000000000 --- a/wince/runperl.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "EXTERN.h" -#include "perl.h" - -#ifdef __GNUC__ - -/* Mingw32 defaults to globing command line - * This is inconsistent with other Win32 ports and - * seems to cause trouble with passing -DXSVERSION=\"1.6\" - * So we turn it off like this: - */ -int _CRT_glob = 0; - -#endif - -int -main(int argc, char **argv, char **env) -{ - return RunPerl(argc, argv, env); -} - - diff --git a/wince/splittree.pl b/wince/splittree.pl deleted file mode 100644 index 3c76daadb1..0000000000 --- a/wince/splittree.pl +++ /dev/null @@ -1,24 +0,0 @@ -use DirHandle; -use AutoSplit; - -sub splitthis { -my ($top,$base,$dest) = @_; -my $d = new DirHandle $base; -if (defined $d) { - while (defined($_ = $d->read)) { - next if $_ eq "."; - next if $_ eq ".."; - my $entry = "$base\\$_"; - my $entrywithouttop = $entry; - $entrywithouttop =~ s/^$top//; - if (-d $entry) {splitthis ($top,$entry,$dest);} - else { - next unless ($entry=~/pm$/i); - #print "Will run autosplit on $entry to $dest\n"; - autosplit($entry,$dest,0,1,1); - }; - }; - }; -} - -splitthis $ARGV[0],$ARGV[0],$ARGV[1]; diff --git a/wince/vdir.h b/wince/vdir.h deleted file mode 100644 index 10119ead9e..0000000000 --- a/wince/vdir.h +++ /dev/null @@ -1,691 +0,0 @@ -/* vdir.h - * - * (c) 1999 Microsoft Corporation. All rights reserved. - * Portions (c) 1999 ActiveState Tool Corp, http://www.ActiveState.com/ - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - */ - -#ifndef ___VDir_H___ -#define ___VDir_H___ - -/* - * Allow one slot for each possible drive letter - * and one additional slot for a UNC name - */ -const int driveCount = ('Z'-'A')+1+1; - -class VDir -{ -public: - VDir(int bManageDir = 1); - ~VDir() {}; - - void Init(VDir* pDir, VMem *pMem); - void SetDefaultA(char const *pDefault); - void SetDefaultW(WCHAR const *pDefault); - char* MapPathA(const char *pInName); - WCHAR* MapPathW(const WCHAR *pInName); - int SetCurrentDirectoryA(char *lpBuffer); - int SetCurrentDirectoryW(WCHAR *lpBuffer); - inline int GetDefault(void) { return nDefault; }; - - inline char* GetCurrentDirectoryA(int dwBufSize, char *lpBuffer) - { - char* ptr = dirTableA[nDefault]; - while (dwBufSize--) - { - if ((*lpBuffer++ = *ptr++) == '\0') - break; - } - return lpBuffer; - }; - inline WCHAR* GetCurrentDirectoryW(int dwBufSize, WCHAR *lpBuffer) - { - WCHAR* ptr = dirTableW[nDefault]; - while (dwBufSize--) - { - if ((*lpBuffer++ = *ptr++) == '\0') - break; - } - return lpBuffer; - }; - - - DWORD CalculateEnvironmentSpace(void); - LPSTR BuildEnvironmentSpace(LPSTR lpStr); - -protected: - int SetDirA(char const *pPath, int index); - void FromEnvA(char *pEnv, int index); - inline const char *GetDefaultDirA(void) - { - return dirTableA[nDefault]; - }; - - inline void SetDefaultDirA(char const *pPath, int index) - { - SetDirA(pPath, index); - nDefault = index; - }; - int SetDirW(WCHAR const *pPath, int index); - inline const WCHAR *GetDefaultDirW(void) - { - return dirTableW[nDefault]; - }; - - inline void SetDefaultDirW(WCHAR const *pPath, int index) - { - SetDirW(pPath, index); - nDefault = index; - }; - inline const char *GetDirA(int index) - { - char *ptr = dirTableA[index]; - if (!ptr) { - /* simulate the existance of this drive */ - ptr = szLocalBufferA; - ptr[0] = 'A' + index; - ptr[1] = ':'; - ptr[2] = '\\'; - ptr[3] = 0; - } - return ptr; - }; - inline const WCHAR *GetDirW(int index) - { - WCHAR *ptr = dirTableW[index]; - if (!ptr) { - /* simulate the existance of this drive */ - ptr = szLocalBufferW; - ptr[0] = 'A' + index; - ptr[1] = ':'; - ptr[2] = '\\'; - ptr[3] = 0; - } - return ptr; - }; - - inline int DriveIndex(char chr) - { - if (chr == '\\' || chr == '/') - return ('Z'-'A')+1; - return (chr | 0x20)-'a'; - }; - - VMem *pMem; - int nDefault, bManageDirectory; - char *dirTableA[driveCount]; - char szLocalBufferA[MAX_PATH+1]; - WCHAR *dirTableW[driveCount]; - WCHAR szLocalBufferW[MAX_PATH+1]; -}; - - -VDir::VDir(int bManageDir /* = 1 */) -{ - nDefault = 0; - bManageDirectory = bManageDir; - memset(dirTableA, 0, sizeof(dirTableA)); - memset(dirTableW, 0, sizeof(dirTableW)); -} - -void VDir::Init(VDir* pDir, VMem *p) -{ - int index; - DWORD driveBits; - int nSave; - char szBuffer[MAX_PATH*driveCount]; - - pMem = p; - if (pDir) { - for (index = 0; index < driveCount; ++index) { - SetDirW(pDir->GetDirW(index), index); - } - nDefault = pDir->GetDefault(); - } - else { - nSave = bManageDirectory; - bManageDirectory = 0; - driveBits = GetLogicalDrives(); - if (GetLogicalDriveStrings(sizeof(szBuffer), szBuffer)) { - char* pEnv = (char*)GetEnvironmentStrings(); - char* ptr = szBuffer; - for (index = 0; index < driveCount; ++index) { - if (driveBits & (1<<index)) { - ptr += SetDirA(ptr, index) + 1; - FromEnvA(pEnv, index); - } - } - FreeEnvironmentStrings(pEnv); - } - SetDefaultA("."); - bManageDirectory = nSave; - } -} - -int VDir::SetDirA(char const *pPath, int index) -{ - char chr, *ptr; - int length = 0; - WCHAR wBuffer[MAX_PATH+1]; - if (index < driveCount && pPath != NULL) { - length = strlen(pPath); - pMem->Free(dirTableA[index]); - ptr = dirTableA[index] = (char*)pMem->Malloc(length+2); - if (ptr != NULL) { - strcpy(ptr, pPath); - ptr += length-1; - chr = *ptr++; - if (chr != '\\' && chr != '/') { - *ptr++ = '\\'; - *ptr = '\0'; - } - MultiByteToWideChar(CP_ACP, 0, dirTableA[index], -1, - wBuffer, (sizeof(wBuffer)/sizeof(WCHAR))); - length = wcslen(wBuffer); - pMem->Free(dirTableW[index]); - dirTableW[index] = (WCHAR*)pMem->Malloc((length+1)*2); - if (dirTableW[index] != NULL) { - wcscpy(dirTableW[index], wBuffer); - } - } - } - - if(bManageDirectory) - ::SetCurrentDirectoryA(pPath); - - return length; -} - -void VDir::FromEnvA(char *pEnv, int index) -{ /* gets the directory for index from the environment variable. */ - while (*pEnv != '\0') { - if ((pEnv[0] == '=') && (DriveIndex(pEnv[1]) == index)) { - SetDirA(&pEnv[4], index); - break; - } - else - pEnv += strlen(pEnv)+1; - } -} - -void VDir::SetDefaultA(char const *pDefault) -{ - char szBuffer[MAX_PATH+1]; - char *pPtr; - - if (GetFullPathNameA(pDefault, sizeof(szBuffer), szBuffer, &pPtr)) { - if (*pDefault != '.' && pPtr != NULL) - *pPtr = '\0'; - - SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0])); - } -} - -int VDir::SetDirW(WCHAR const *pPath, int index) -{ - WCHAR chr, *ptr; - char szBuffer[MAX_PATH+1]; - int length = 0; - if (index < driveCount && pPath != NULL) { - length = wcslen(pPath); - pMem->Free(dirTableW[index]); - ptr = dirTableW[index] = (WCHAR*)pMem->Malloc((length+2)*2); - if (ptr != NULL) { - wcscpy(ptr, pPath); - ptr += length-1; - chr = *ptr++; - if (chr != '\\' && chr != '/') { - *ptr++ = '\\'; - *ptr = '\0'; - } - WideCharToMultiByte(CP_ACP, 0, dirTableW[index], -1, szBuffer, sizeof(szBuffer), NULL, NULL); - length = strlen(szBuffer); - pMem->Free(dirTableA[index]); - dirTableA[index] = (char*)pMem->Malloc(length+1); - if (dirTableA[index] != NULL) { - strcpy(dirTableA[index], szBuffer); - } - } - } - - if(bManageDirectory) - ::SetCurrentDirectoryW(pPath); - - return length; -} - -void VDir::SetDefaultW(WCHAR const *pDefault) -{ - WCHAR szBuffer[MAX_PATH+1]; - WCHAR *pPtr; - - if (GetFullPathNameW(pDefault, (sizeof(szBuffer)/sizeof(WCHAR)), szBuffer, &pPtr)) { - if (*pDefault != '.' && pPtr != NULL) - *pPtr = '\0'; - - SetDefaultDirW(szBuffer, DriveIndex((char)szBuffer[0])); - } -} - -inline BOOL IsPathSep(char ch) -{ - return (ch == '\\' || ch == '/'); -} - -inline void DoGetFullPathNameA(char* lpBuffer, DWORD dwSize, char* Dest) -{ - char *pPtr; - - /* - * On WinNT GetFullPathName does not fail, (or at least always - * succeeds when the drive is valid) WinNT does set *Dest to Nullch - * On Win98 GetFullPathName will set last error if it fails, but - * does not touch *Dest - */ - *Dest = '\0'; - GetFullPathNameA(lpBuffer, dwSize, Dest, &pPtr); -} - -inline bool IsSpecialFileName(const char* pName) -{ - /* specical file names are devices that the system can open - * these include AUX, CON, NUL, PRN, COMx, LPTx, CLOCK$, CONIN$, CONOUT$ - * (x is a single digit, and names are case-insensitive) - */ - char ch = (pName[0] & ~0x20); - switch (ch) - { - case 'A': /* AUX */ - if (((pName[1] & ~0x20) == 'U') - && ((pName[2] & ~0x20) == 'X') - && !pName[3]) - return true; - break; - case 'C': /* CLOCK$, COMx, CON, CONIN$ CONOUT$ */ - ch = (pName[1] & ~0x20); - switch (ch) - { - case 'L': /* CLOCK$ */ - if (((pName[2] & ~0x20) == 'O') - && ((pName[3] & ~0x20) == 'C') - && ((pName[4] & ~0x20) == 'K') - && (pName[5] == '$') - && !pName[6]) - return true; - break; - case 'O': /* COMx, CON, CONIN$ CONOUT$ */ - if ((pName[2] & ~0x20) == 'M') { - if ((pName[3] >= '1') && (pName[3] <= '9') - && !pName[4]) - return true; - } - else if ((pName[2] & ~0x20) == 'N') { - if (!pName[3]) - return true; - else if ((pName[3] & ~0x20) == 'I') { - if (((pName[4] & ~0x20) == 'N') - && (pName[5] == '$') - && !pName[6]) - return true; - } - else if ((pName[3] & ~0x20) == 'O') { - if (((pName[4] & ~0x20) == 'U') - && ((pName[5] & ~0x20) == 'T') - && (pName[6] == '$') - && !pName[7]) - return true; - } - } - break; - } - break; - case 'L': /* LPTx */ - if (((pName[1] & ~0x20) == 'U') - && ((pName[2] & ~0x20) == 'X') - && (pName[3] >= '1') && (pName[3] <= '9') - && !pName[4]) - return true; - break; - case 'N': /* NUL */ - if (((pName[1] & ~0x20) == 'U') - && ((pName[2] & ~0x20) == 'L') - && !pName[3]) - return true; - break; - case 'P': /* PRN */ - if (((pName[1] & ~0x20) == 'R') - && ((pName[2] & ~0x20) == 'N') - && !pName[3]) - return true; - break; - } - return false; -} - -char *VDir::MapPathA(const char *pInName) -{ /* - * possiblities -- relative path or absolute path with or without drive letter - * OR UNC name - */ - char szBuffer[(MAX_PATH+1)*2]; - char szlBuf[MAX_PATH+1]; - int length = strlen(pInName); - - if (!length) - return (char*)pInName; - - if (length > MAX_PATH) { - strncpy(szlBuf, pInName, MAX_PATH); - if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) { - /* absolute path - reduce length by 2 for drive specifier */ - szlBuf[MAX_PATH-2] = '\0'; - } - else - szlBuf[MAX_PATH] = '\0'; - pInName = szlBuf; - } - /* strlen(pInName) is now <= MAX_PATH */ - - if (pInName[1] == ':') { - /* has drive letter */ - if (IsPathSep(pInName[2])) { - /* absolute with drive letter */ - DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA); - } - else { - /* relative path with drive letter */ - strcpy(szBuffer, GetDirA(DriveIndex(*pInName))); - strcat(szBuffer, &pInName[2]); - if(strlen(szBuffer) > MAX_PATH) - szBuffer[MAX_PATH] = '\0'; - - DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA); - } - } - else { - /* no drive letter */ - if (IsPathSep(pInName[1]) && IsPathSep(pInName[0])) { - /* UNC name */ - DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA); - } - else { - strcpy(szBuffer, GetDefaultDirA()); - if (IsPathSep(pInName[0])) { - /* absolute path */ - strcpy(&szBuffer[2], pInName); - DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA); - } - else { - /* relative path */ - if (IsSpecialFileName(pInName)) { - return (char*)pInName; - } - else { - strcat(szBuffer, pInName); - if (strlen(szBuffer) > MAX_PATH) - szBuffer[MAX_PATH] = '\0'; - - DoGetFullPathNameA(szBuffer, sizeof(szLocalBufferA), szLocalBufferA); - } - } - } - } - - return szLocalBufferA; -} - -int VDir::SetCurrentDirectoryA(char *lpBuffer) -{ - char *pPtr; - int length, nRet = -1; - - pPtr = MapPathA(lpBuffer); - length = strlen(pPtr); - if(length > 3 && IsPathSep(pPtr[length-1])) { - /* don't remove the trailing slash from 'x:\' */ - pPtr[length-1] = '\0'; - } - - DWORD r = GetFileAttributesA(pPtr); - if ((r != 0xffffffff) && (r & FILE_ATTRIBUTE_DIRECTORY)) - { - char szBuffer[(MAX_PATH+1)*2]; - DoGetFullPathNameA(pPtr, sizeof(szBuffer), szBuffer); - SetDefaultDirA(szBuffer, DriveIndex(szBuffer[0])); - nRet = 0; - } - - return nRet; -} - -DWORD VDir::CalculateEnvironmentSpace(void) -{ /* the current directory environment strings are stored as '=D:=d:\path' */ - int index; - DWORD dwSize = 0; - for (index = 0; index < driveCount; ++index) { - if (dirTableA[index] != NULL) { - dwSize += strlen(dirTableA[index]) + 5; /* add 1 for trailing NULL and 4 for '=D:=' */ - } - } - return dwSize; -} - -LPSTR VDir::BuildEnvironmentSpace(LPSTR lpStr) -{ /* store the current directory environment strings as '=D:=d:\path' */ - int index, length; - LPSTR lpDirStr; - for (index = 0; index < driveCount; ++index) { - lpDirStr = dirTableA[index]; - if (lpDirStr != NULL) { - lpStr[0] = '='; - lpStr[1] = lpDirStr[0]; - lpStr[2] = '\0'; - CharUpper(&lpStr[1]); - lpStr[2] = ':'; - lpStr[3] = '='; - strcpy(&lpStr[4], lpDirStr); - length = strlen(lpDirStr); - lpStr += length + 5; /* add 1 for trailing NULL and 4 for '=D:=' */ - if (length > 3 && IsPathSep(lpStr[-2])) { - lpStr[-2] = '\0'; /* remove the trailing path separator */ - --lpStr; - } - } - } - return lpStr; -} - -inline BOOL IsPathSep(WCHAR ch) -{ - return (ch == '\\' || ch == '/'); -} - -inline void DoGetFullPathNameW(WCHAR* lpBuffer, DWORD dwSize, WCHAR* Dest) -{ - WCHAR *pPtr; - - /* - * On WinNT GetFullPathName does not fail, (or at least always - * succeeds when the drive is valid) WinNT does set *Dest to Nullch - * On Win98 GetFullPathName will set last error if it fails, but - * does not touch *Dest - */ - *Dest = '\0'; - GetFullPathNameW(lpBuffer, dwSize, Dest, &pPtr); -} - -inline bool IsSpecialFileName(const WCHAR* pName) -{ - /* specical file names are devices that the system can open - * these include AUX, CON, NUL, PRN, COMx, LPTx, CLOCK$, CONIN$, CONOUT$ - * (x is a single digit, and names are case-insensitive) - */ - WCHAR ch = (pName[0] & ~0x20); - switch (ch) - { - case 'A': /* AUX */ - if (((pName[1] & ~0x20) == 'U') - && ((pName[2] & ~0x20) == 'X') - && !pName[3]) - return true; - break; - case 'C': /* CLOCK$, COMx, CON, CONIN$ CONOUT$ */ - ch = (pName[1] & ~0x20); - switch (ch) - { - case 'L': /* CLOCK$ */ - if (((pName[2] & ~0x20) == 'O') - && ((pName[3] & ~0x20) == 'C') - && ((pName[4] & ~0x20) == 'K') - && (pName[5] == '$') - && !pName[6]) - return true; - break; - case 'O': /* COMx, CON, CONIN$ CONOUT$ */ - if ((pName[2] & ~0x20) == 'M') { - if ((pName[3] >= '1') && (pName[3] <= '9') - && !pName[4]) - return true; - } - else if ((pName[2] & ~0x20) == 'N') { - if (!pName[3]) - return true; - else if ((pName[3] & ~0x20) == 'I') { - if (((pName[4] & ~0x20) == 'N') - && (pName[5] == '$') - && !pName[6]) - return true; - } - else if ((pName[3] & ~0x20) == 'O') { - if (((pName[4] & ~0x20) == 'U') - && ((pName[5] & ~0x20) == 'T') - && (pName[6] == '$') - && !pName[7]) - return true; - } - } - break; - } - break; - case 'L': /* LPTx */ - if (((pName[1] & ~0x20) == 'U') - && ((pName[2] & ~0x20) == 'X') - && (pName[3] >= '1') && (pName[3] <= '9') - && !pName[4]) - return true; - break; - case 'N': /* NUL */ - if (((pName[1] & ~0x20) == 'U') - && ((pName[2] & ~0x20) == 'L') - && !pName[3]) - return true; - break; - case 'P': /* PRN */ - if (((pName[1] & ~0x20) == 'R') - && ((pName[2] & ~0x20) == 'N') - && !pName[3]) - return true; - break; - } - return false; -} - -WCHAR* VDir::MapPathW(const WCHAR *pInName) -{ /* - * possiblities -- relative path or absolute path with or without drive letter - * OR UNC name - */ - WCHAR szBuffer[(MAX_PATH+1)*2]; - WCHAR szlBuf[MAX_PATH+1]; - int length = wcslen(pInName); - - if (!length) - return (WCHAR*)pInName; - - if (length > MAX_PATH) { - wcsncpy(szlBuf, pInName, MAX_PATH); - if (IsPathSep(pInName[0]) && !IsPathSep(pInName[1])) { - /* absolute path - reduce length by 2 for drive specifier */ - szlBuf[MAX_PATH-2] = '\0'; - } - else - szlBuf[MAX_PATH] = '\0'; - pInName = szlBuf; - } - /* strlen(pInName) is now <= MAX_PATH */ - - if (pInName[1] == ':') { - /* has drive letter */ - if (IsPathSep(pInName[2])) { - /* absolute with drive letter */ - DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW); - } - else { - /* relative path with drive letter */ - wcscpy(szBuffer, GetDirW(DriveIndex((char)*pInName))); - wcscat(szBuffer, &pInName[2]); - if(wcslen(szBuffer) > MAX_PATH) - szBuffer[MAX_PATH] = '\0'; - - DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW); - } - } - else { - /* no drive letter */ - if (IsPathSep(pInName[1]) && IsPathSep(pInName[0])) { - /* UNC name */ - DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW); - } - else { - wcscpy(szBuffer, GetDefaultDirW()); - if (IsPathSep(pInName[0])) { - /* absolute path */ - wcscpy(&szBuffer[2], pInName); - DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW); - } - else { - /* relative path */ - if (IsSpecialFileName(pInName)) { - return (WCHAR*)pInName; - } - else { - wcscat(szBuffer, pInName); - if (wcslen(szBuffer) > MAX_PATH) - szBuffer[MAX_PATH] = '\0'; - - DoGetFullPathNameW(szBuffer, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW); - } - } - } - } - return szLocalBufferW; -} - -int VDir::SetCurrentDirectoryW(WCHAR *lpBuffer) -{ - WCHAR *pPtr; - int length, nRet = -1; - - pPtr = MapPathW(lpBuffer); - length = wcslen(pPtr); - if(length > 3 && IsPathSep(pPtr[length-1])) { - /* don't remove the trailing slash from 'x:\' */ - pPtr[length-1] = '\0'; - } - - DWORD r = GetFileAttributesW(pPtr); - if ((r != 0xffffffff) && (r & FILE_ATTRIBUTE_DIRECTORY)) - { - WCHAR wBuffer[(MAX_PATH+1)*2]; - DoGetFullPathNameW(pPtr, (sizeof(wBuffer)/sizeof(WCHAR)), wBuffer); - SetDefaultDirW(wBuffer, DriveIndex((char)wBuffer[0])); - nRet = 0; - } - - return nRet; -} - -#endif /* ___VDir_H___ */ diff --git a/wince/vmem.h b/wince/vmem.h deleted file mode 100644 index 1fd421ca38..0000000000 --- a/wince/vmem.h +++ /dev/null @@ -1,1248 +0,0 @@ -/* vmem.h - * - * (c) 1999 Microsoft Corporation. All rights reserved. - * Portions (c) 1999 ActiveState Tool Corp, http://www.ActiveState.com/ - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - * Options: - * - * Defining _USE_MSVCRT_MEM_ALLOC will cause all memory allocations - * to be forwarded to MSVCRT.DLL. Defining _USE_LINKED_LIST as well will - * track all allocations in a doubly linked list, so that the host can - * free all memory allocated when it goes away. - * If _USE_MSVCRT_MEM_ALLOC is not defined then Knuth's boundary tag algorithm - * is used; defining _USE_BUDDY_BLOCKS will use Knuth's algorithm R - * (Buddy system reservation) - * - */ - -#ifndef ___VMEM_H_INC___ -#define ___VMEM_H_INC___ - -// #define _USE_MSVCRT_MEM_ALLOC -#define _USE_LINKED_LIST - -// #define _USE_BUDDY_BLOCKS - -// #define _DEBUG_MEM -#ifdef _DEBUG_MEM -#define ASSERT(f) if(!(f)) DebugBreak(); - -inline void MEMODS(char *str) -{ - OutputDebugString(str); - OutputDebugString("\n"); -} - -inline void MEMODSlx(char *str, long x) -{ - char szBuffer[512]; - sprintf(szBuffer, "%s %lx\n", str, x); - OutputDebugString(szBuffer); -} - -#define WALKHEAP() WalkHeap(0) -#define WALKHEAPTRACE() WalkHeap(1) - -#else - -#define ASSERT(f) -#define MEMODS(x) -#define MEMODSlx(x, y) -#define WALKHEAP() -#define WALKHEAPTRACE() - -#endif - -#ifdef _USE_MSVCRT_MEM_ALLOC - -#ifndef _USE_LINKED_LIST -// #define _USE_LINKED_LIST -#endif - -/* - * Pass all memory requests throught to msvcrt.dll - * optionaly track by using a doubly linked header - */ - -typedef void (*LPFREE)(void *block); -typedef void* (*LPMALLOC)(size_t size); -typedef void* (*LPREALLOC)(void *block, size_t size); -#ifdef _USE_LINKED_LIST -class VMem; -typedef struct _MemoryBlockHeader* PMEMORY_BLOCK_HEADER; -typedef struct _MemoryBlockHeader { - PMEMORY_BLOCK_HEADER pNext; - PMEMORY_BLOCK_HEADER pPrev; - VMem *owner; -} MEMORY_BLOCK_HEADER, *PMEMORY_BLOCK_HEADER; -#endif - -class VMem -{ -public: - VMem(); - ~VMem(); - virtual void* Malloc(size_t size); - virtual void* Realloc(void* pMem, size_t size); - virtual void Free(void* pMem); - virtual void GetLock(void); - virtual void FreeLock(void); - virtual int IsLocked(void); - virtual long Release(void); - virtual long AddRef(void); - - inline BOOL CreateOk(void) - { - return TRUE; - }; - -protected: -#ifdef _USE_LINKED_LIST - void LinkBlock(PMEMORY_BLOCK_HEADER ptr) - { - PMEMORY_BLOCK_HEADER next = m_Dummy.pNext; - m_Dummy.pNext = ptr; - ptr->pPrev = &m_Dummy; - ptr->pNext = next; - ptr->owner = this; - next->pPrev = ptr; - } - void UnlinkBlock(PMEMORY_BLOCK_HEADER ptr) - { - PMEMORY_BLOCK_HEADER next = ptr->pNext; - PMEMORY_BLOCK_HEADER prev = ptr->pPrev; - prev->pNext = next; - next->pPrev = prev; - } - - MEMORY_BLOCK_HEADER m_Dummy; -#endif - - long m_lRefCount; // number of current users - CRITICAL_SECTION m_cs; // access lock - HINSTANCE m_hLib; - LPFREE m_pfree; - LPMALLOC m_pmalloc; - LPREALLOC m_prealloc; -}; - -VMem::VMem() -{ - m_lRefCount = 1; - InitializeCriticalSection(&m_cs); -#ifdef _USE_LINKED_LIST - m_Dummy.pNext = m_Dummy.pPrev = &m_Dummy; - m_Dummy.owner = this; -#endif - m_hLib = LoadLibrary("msvcrt.dll"); - if (m_hLib) { - m_pfree = (LPFREE)GetProcAddress(m_hLib, "free"); - m_pmalloc = (LPMALLOC)GetProcAddress(m_hLib, "malloc"); - m_prealloc = (LPREALLOC)GetProcAddress(m_hLib, "realloc"); - } -} - -VMem::~VMem(void) -{ -#ifdef _USE_LINKED_LIST - while (m_Dummy.pNext != &m_Dummy) { - Free(m_Dummy.pNext+1); - } -#endif - if (m_hLib) - FreeLibrary(m_hLib); - DeleteCriticalSection(&m_cs); -} - -void* VMem::Malloc(size_t size) -{ -#ifdef _USE_LINKED_LIST - GetLock(); - PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)m_pmalloc(size+sizeof(MEMORY_BLOCK_HEADER)); - LinkBlock(ptr); - FreeLock(); - return (ptr+1); -#else - return m_pmalloc(size); -#endif -} - -void* VMem::Realloc(void* pMem, size_t size) -{ -#ifdef _USE_LINKED_LIST - if (!pMem) - return Malloc(size); - - if (!size) { - Free(pMem); - return NULL; - } - - GetLock(); - PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER)); - UnlinkBlock(ptr); - ptr = (PMEMORY_BLOCK_HEADER)m_prealloc(ptr, size+sizeof(MEMORY_BLOCK_HEADER)); - LinkBlock(ptr); - FreeLock(); - - return (ptr+1); -#else - return m_prealloc(pMem, size); -#endif -} - -void VMem::Free(void* pMem) -{ -#ifdef _USE_LINKED_LIST - if (pMem) { - PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER)); - if (ptr->owner != this) { - if (ptr->owner) { -#if 1 - dTHX; - int *nowhere = NULL; - Perl_warn(aTHX_ "Free to wrong pool %p not %p",this,ptr->owner); - *nowhere = 0; -#else - ptr->owner->Free(pMem); -#endif - } - return; - } - GetLock(); - UnlinkBlock(ptr); - ptr->owner = NULL; - m_pfree(ptr); - FreeLock(); - } -#else - m_pfree(pMem); -#endif -} - -void VMem::GetLock(void) -{ - EnterCriticalSection(&m_cs); -} - -void VMem::FreeLock(void) -{ - LeaveCriticalSection(&m_cs); -} - -int VMem::IsLocked(void) -{ -#if 0 - /* XXX TryEnterCriticalSection() is not available in some versions - * of Windows 95. Since this code is not used anywhere yet, we - * skirt the issue for now. */ - BOOL bAccessed = TryEnterCriticalSection(&m_cs); - if(bAccessed) { - LeaveCriticalSection(&m_cs); - } - return !bAccessed; -#else - ASSERT(0); /* alarm bells for when somebody calls this */ - return 0; -#endif -} - -long VMem::Release(void) -{ - long lCount = InterlockedDecrement(&m_lRefCount); - if(!lCount) - delete this; - return lCount; -} - -long VMem::AddRef(void) -{ - long lCount = InterlockedIncrement(&m_lRefCount); - return lCount; -} - -#else /* _USE_MSVCRT_MEM_ALLOC */ - -/* - * Knuth's boundary tag algorithm Vol #1, Page 440. - * - * Each block in the heap has tag words before and after it, - * TAG - * block - * TAG - * The size is stored in these tags as a long word, and includes the 8 bytes - * of overhead that the boundary tags consume. Blocks are allocated on long - * word boundaries, so the size is always multiples of long words. When the - * block is allocated, bit 0, (the tag bit), of the size is set to 1. When - * a block is freed, it is merged with adjacent free blocks, and the tag bit - * is set to 0. - * - * A linked list is used to manage the free list. The first two long words of - * the block contain double links. These links are only valid when the block - * is freed, therefore space needs to be reserved for them. Thus, the minimum - * block size (not counting the tags) is 8 bytes. - * - * Since memory allocation may occur on a single threaded, explict locks are not - * provided. - * - */ - -const long lAllocStart = 0x00020000; /* start at 128K */ -const long minBlockSize = sizeof(void*)*2; -const long sizeofTag = sizeof(long); -const long blockOverhead = sizeofTag*2; -const long minAllocSize = minBlockSize+blockOverhead; -#ifdef _USE_BUDDY_BLOCKS -const long lSmallBlockSize = 1024; -const size_t nListEntries = ((lSmallBlockSize-minAllocSize)/sizeof(long)); - -inline size_t CalcEntry(size_t size) -{ - ASSERT((size&(sizeof(long)-1)) == 0); - return ((size - minAllocSize) / sizeof(long)); -} -#endif - -typedef BYTE* PBLOCK; /* pointer to a memory block */ - -/* - * Macros for accessing hidden fields in a memory block: - * - * SIZE size of this block (tag bit 0 is 1 if block is allocated) - * PSIZE size of previous physical block - */ - -#define SIZE(block) (*(ULONG*)(((PBLOCK)(block))-sizeofTag)) -#define PSIZE(block) (*(ULONG*)(((PBLOCK)(block))-(blockOverhead))) -inline void SetTags(PBLOCK block, long size) -{ - SIZE(block) = size; - PSIZE(block+(size&~1)) = size; -} - -/* - * Free list pointers - * PREV pointer to previous block - * NEXT pointer to next block - */ - -#define PREV(block) (*(PBLOCK*)(block)) -#define NEXT(block) (*(PBLOCK*)((block)+sizeof(PBLOCK))) -inline void SetLink(PBLOCK block, PBLOCK prev, PBLOCK next) -{ - PREV(block) = prev; - NEXT(block) = next; -} -inline void Unlink(PBLOCK p) -{ - PBLOCK next = NEXT(p); - PBLOCK prev = PREV(p); - NEXT(prev) = next; - PREV(next) = prev; -} -#ifndef _USE_BUDDY_BLOCKS -inline void AddToFreeList(PBLOCK block, PBLOCK pInList) -{ - PBLOCK next = NEXT(pInList); - NEXT(pInList) = block; - SetLink(block, pInList, next); - PREV(next) = block; -} -#endif - -/* Macro for rounding up to the next sizeof(long) */ -#define ROUND_UP(n) (((ULONG)(n)+sizeof(long)-1)&~(sizeof(long)-1)) -#define ROUND_UP64K(n) (((ULONG)(n)+0x10000-1)&~(0x10000-1)) -#define ROUND_DOWN(n) ((ULONG)(n)&~(sizeof(long)-1)) - -/* - * HeapRec - a list of all non-contiguous heap areas - * - * Each record in this array contains information about a non-contiguous heap area. - */ - -const int maxHeaps = 32; /* 64 was overkill */ -const long lAllocMax = 0x80000000; /* max size of allocation */ - -#ifdef _USE_BUDDY_BLOCKS -typedef struct _FreeListEntry -{ - BYTE Dummy[minAllocSize]; // dummy free block -} FREE_LIST_ENTRY, *PFREE_LIST_ENTRY; -#endif - -#ifndef _USE_BUDDY_BLOCKS -#define USE_BIGBLOCK_ALLOC -#endif -/* - * performance tuning - * Use VirtualAlloc() for blocks bigger than nMaxHeapAllocSize since - * Windows 95/98/Me have heap managers that are designed for memory - * blocks smaller than four megabytes. - */ - -#ifdef USE_BIGBLOCK_ALLOC -const int nMaxHeapAllocSize = (1024*512); /* don't allocate anything larger than this from the heap */ -#endif - -typedef struct _HeapRec -{ - PBLOCK base; /* base of heap area */ - ULONG len; /* size of heap area */ -#ifdef USE_BIGBLOCK_ALLOC - BOOL bBigBlock; /* was allocate using VirtualAlloc */ -#endif -} HeapRec; - -class VMem -{ -public: - VMem(); - ~VMem(); - virtual void* Malloc(size_t size); - virtual void* Realloc(void* pMem, size_t size); - virtual void Free(void* pMem); - virtual void GetLock(void); - virtual void FreeLock(void); - virtual int IsLocked(void); - virtual long Release(void); - virtual long AddRef(void); - - inline BOOL CreateOk(void) - { -#ifdef _USE_BUDDY_BLOCKS - return TRUE; -#else - return m_hHeap != NULL; -#endif - }; - - void ReInit(void); - -protected: - void Init(void); - int Getmem(size_t size); - - int HeapAdd(void* ptr, size_t size -#ifdef USE_BIGBLOCK_ALLOC - , BOOL bBigBlock -#endif - ); - - void* Expand(void* block, size_t size); - -#ifdef _USE_BUDDY_BLOCKS - inline PBLOCK GetFreeListLink(int index) - { - if (index >= nListEntries) - index = nListEntries-1; - return &m_FreeList[index].Dummy[sizeofTag]; - } - inline PBLOCK GetOverSizeFreeList(void) - { - return &m_FreeList[nListEntries-1].Dummy[sizeofTag]; - } - inline PBLOCK GetEOLFreeList(void) - { - return &m_FreeList[nListEntries].Dummy[sizeofTag]; - } - - void AddToFreeList(PBLOCK block, size_t size) - { - PBLOCK pFreeList = GetFreeListLink(CalcEntry(size)); - PBLOCK next = NEXT(pFreeList); - NEXT(pFreeList) = block; - SetLink(block, pFreeList, next); - PREV(next) = block; - } -#endif - inline size_t CalcAllocSize(size_t size) - { - /* - * Adjust the real size of the block to be a multiple of sizeof(long), and add - * the overhead for the boundary tags. Disallow negative or zero sizes. - */ - return (size < minBlockSize) ? minAllocSize : (size_t)ROUND_UP(size) + blockOverhead; - } - -#ifdef _USE_BUDDY_BLOCKS - FREE_LIST_ENTRY m_FreeList[nListEntries+1]; // free list with dummy end of list entry as well -#else - HANDLE m_hHeap; // memory heap for this script - char m_FreeDummy[minAllocSize]; // dummy free block - PBLOCK m_pFreeList; // pointer to first block on free list -#endif - PBLOCK m_pRover; // roving pointer into the free list - HeapRec m_heaps[maxHeaps]; // list of all non-contiguous heap areas - int m_nHeaps; // no. of heaps in m_heaps - long m_lAllocSize; // current alloc size - long m_lRefCount; // number of current users - CRITICAL_SECTION m_cs; // access lock - -#ifdef _DEBUG_MEM - void WalkHeap(int complete); - void MemoryUsageMessage(char *str, long x, long y, int c); - FILE* m_pLog; -#endif -}; - -VMem::VMem() -{ - m_lRefCount = 1; -#ifndef _USE_BUDDY_BLOCKS - BOOL bRet = (NULL != (m_hHeap = HeapCreate(HEAP_NO_SERIALIZE, - lAllocStart, /* initial size of heap */ - 0))); /* no upper limit on size of heap */ - ASSERT(bRet); -#endif - - InitializeCriticalSection(&m_cs); -#ifdef _DEBUG_MEM - m_pLog = 0; -#endif - - Init(); -} - -VMem::~VMem(void) -{ -#ifndef _USE_BUDDY_BLOCKS - ASSERT(HeapValidate(m_hHeap, HEAP_NO_SERIALIZE, NULL)); -#endif - WALKHEAPTRACE(); - - DeleteCriticalSection(&m_cs); -#ifdef _USE_BUDDY_BLOCKS - for(int index = 0; index < m_nHeaps; ++index) { - VirtualFree(m_heaps[index].base, 0, MEM_RELEASE); - } -#else /* !_USE_BUDDY_BLOCKS */ -#ifdef USE_BIGBLOCK_ALLOC - for(int index = 0; index < m_nHeaps; ++index) { - if (m_heaps[index].bBigBlock) { - VirtualFree(m_heaps[index].base, 0, MEM_RELEASE); - } - } -#endif - BOOL bRet = HeapDestroy(m_hHeap); - ASSERT(bRet); -#endif /* _USE_BUDDY_BLOCKS */ -} - -void VMem::ReInit(void) -{ - for(int index = 0; index < m_nHeaps; ++index) { -#ifdef _USE_BUDDY_BLOCKS - VirtualFree(m_heaps[index].base, 0, MEM_RELEASE); -#else -#ifdef USE_BIGBLOCK_ALLOC - if (m_heaps[index].bBigBlock) { - VirtualFree(m_heaps[index].base, 0, MEM_RELEASE); - } - else -#endif - HeapFree(m_hHeap, HEAP_NO_SERIALIZE, m_heaps[index].base); -#endif /* _USE_BUDDY_BLOCKS */ - } - - Init(); -} - -void VMem::Init(void) -{ -#ifdef _USE_BUDDY_BLOCKS - PBLOCK pFreeList; - /* - * Initialize the free list by placing a dummy zero-length block on it. - * Set the end of list marker. - * Set the number of non-contiguous heaps to zero. - * Set the next allocation size. - */ - for (int index = 0; index < nListEntries; ++index) { - pFreeList = GetFreeListLink(index); - SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0; - PREV(pFreeList) = NEXT(pFreeList) = pFreeList; - } - pFreeList = GetEOLFreeList(); - SIZE(pFreeList) = PSIZE(pFreeList+minAllocSize) = 0; - PREV(pFreeList) = NEXT(pFreeList) = NULL; - m_pRover = GetOverSizeFreeList(); -#else - /* - * Initialize the free list by placing a dummy zero-length block on it. - * Set the number of non-contiguous heaps to zero. - */ - m_pFreeList = m_pRover = (PBLOCK)(&m_FreeDummy[sizeofTag]); - PSIZE(m_pFreeList+minAllocSize) = SIZE(m_pFreeList) = 0; - PREV(m_pFreeList) = NEXT(m_pFreeList) = m_pFreeList; -#endif - - m_nHeaps = 0; - m_lAllocSize = lAllocStart; -} - -void* VMem::Malloc(size_t size) -{ - WALKHEAP(); - - PBLOCK ptr; - size_t lsize, rem; - /* - * Disallow negative or zero sizes. - */ - size_t realsize = CalcAllocSize(size); - if((int)realsize < minAllocSize || size == 0) - return NULL; - -#ifdef _USE_BUDDY_BLOCKS - /* - * Check the free list of small blocks if this is free use it - * Otherwise check the rover if it has no blocks then - * Scan the free list entries use the first free block - * split the block if needed, stop at end of list marker - */ - { - int index = CalcEntry(realsize); - if (index < nListEntries-1) { - ptr = GetFreeListLink(index); - lsize = SIZE(ptr); - if (lsize >= realsize) { - rem = lsize - realsize; - if(rem < minAllocSize) { - /* Unlink the block from the free list. */ - Unlink(ptr); - } - else { - /* - * split the block - * The remainder is big enough to split off into a new block. - * Use the end of the block, resize the beginning of the block - * no need to change the free list. - */ - SetTags(ptr, rem); - ptr += SIZE(ptr); - lsize = realsize; - } - SetTags(ptr, lsize | 1); - return ptr; - } - ptr = m_pRover; - lsize = SIZE(ptr); - if (lsize >= realsize) { - rem = lsize - realsize; - if(rem < minAllocSize) { - /* Unlink the block from the free list. */ - Unlink(ptr); - } - else { - /* - * split the block - * The remainder is big enough to split off into a new block. - * Use the end of the block, resize the beginning of the block - * no need to change the free list. - */ - SetTags(ptr, rem); - ptr += SIZE(ptr); - lsize = realsize; - } - SetTags(ptr, lsize | 1); - return ptr; - } - ptr = GetFreeListLink(index+1); - while (NEXT(ptr)) { - lsize = SIZE(ptr); - if (lsize >= realsize) { - size_t rem = lsize - realsize; - if(rem < minAllocSize) { - /* Unlink the block from the free list. */ - Unlink(ptr); - } - else { - /* - * split the block - * The remainder is big enough to split off into a new block. - * Use the end of the block, resize the beginning of the block - * no need to change the free list. - */ - SetTags(ptr, rem); - ptr += SIZE(ptr); - lsize = realsize; - } - SetTags(ptr, lsize | 1); - return ptr; - } - ptr += sizeof(FREE_LIST_ENTRY); - } - } - } -#endif - - /* - * Start searching the free list at the rover. If we arrive back at rover without - * finding anything, allocate some memory from the heap and try again. - */ - ptr = m_pRover; /* start searching at rover */ - int loops = 2; /* allow two times through the loop */ - for(;;) { - lsize = SIZE(ptr); - ASSERT((lsize&1)==0); - /* is block big enough? */ - if(lsize >= realsize) { - /* if the remainder is too small, don't bother splitting the block. */ - rem = lsize - realsize; - if(rem < minAllocSize) { - if(m_pRover == ptr) - m_pRover = NEXT(ptr); - - /* Unlink the block from the free list. */ - Unlink(ptr); - } - else { - /* - * split the block - * The remainder is big enough to split off into a new block. - * Use the end of the block, resize the beginning of the block - * no need to change the free list. - */ - SetTags(ptr, rem); - ptr += SIZE(ptr); - lsize = realsize; - } - /* Set the boundary tags to mark it as allocated. */ - SetTags(ptr, lsize | 1); - return ((void *)ptr); - } - - /* - * This block was unsuitable. If we've gone through this list once already without - * finding anything, allocate some new memory from the heap and try again. - */ - ptr = NEXT(ptr); - if(ptr == m_pRover) { - if(!(loops-- && Getmem(realsize))) { - return NULL; - } - ptr = m_pRover; - } - } -} - -void* VMem::Realloc(void* block, size_t size) -{ - WALKHEAP(); - - /* if size is zero, free the block. */ - if(size == 0) { - Free(block); - return (NULL); - } - - /* if block pointer is NULL, do a Malloc(). */ - if(block == NULL) - return Malloc(size); - - /* - * Grow or shrink the block in place. - * if the block grows then the next block will be used if free - */ - if(Expand(block, size) != NULL) - return block; - - size_t realsize = CalcAllocSize(size); - if((int)realsize < minAllocSize) - return NULL; - - /* - * see if the previous block is free, and is it big enough to cover the new size - * if merged with the current block. - */ - PBLOCK ptr = (PBLOCK)block; - size_t cursize = SIZE(ptr) & ~1; - size_t psize = PSIZE(ptr); - if((psize&1) == 0 && (psize + cursize) >= realsize) { - PBLOCK prev = ptr - psize; - if(m_pRover == prev) - m_pRover = NEXT(prev); - - /* Unlink the next block from the free list. */ - Unlink(prev); - - /* Copy contents of old block to new location, make it the current block. */ - memmove(prev, ptr, cursize); - cursize += psize; /* combine sizes */ - ptr = prev; - - size_t rem = cursize - realsize; - if(rem >= minAllocSize) { - /* - * The remainder is big enough to be a new block. Set boundary - * tags for the resized block and the new block. - */ - prev = ptr + realsize; - /* - * add the new block to the free list. - * next block cannot be free - */ - SetTags(prev, rem); -#ifdef _USE_BUDDY_BLOCKS - AddToFreeList(prev, rem); -#else - AddToFreeList(prev, m_pFreeList); -#endif - cursize = realsize; - } - /* Set the boundary tags to mark it as allocated. */ - SetTags(ptr, cursize | 1); - return ((void *)ptr); - } - - /* Allocate a new block, copy the old to the new, and free the old. */ - if((ptr = (PBLOCK)Malloc(size)) != NULL) { - memmove(ptr, block, cursize-blockOverhead); - Free(block); - } - return ((void *)ptr); -} - -void VMem::Free(void* p) -{ - WALKHEAP(); - - /* Ignore null pointer. */ - if(p == NULL) - return; - - PBLOCK ptr = (PBLOCK)p; - - /* Check for attempt to free a block that's already free. */ - size_t size = SIZE(ptr); - if((size&1) == 0) { - MEMODSlx("Attempt to free previously freed block", (long)p); - return; - } - size &= ~1; /* remove allocated tag */ - - /* if previous block is free, add this block to it. */ -#ifndef _USE_BUDDY_BLOCKS - int linked = FALSE; -#endif - size_t psize = PSIZE(ptr); - if((psize&1) == 0) { - ptr -= psize; /* point to previous block */ - size += psize; /* merge the sizes of the two blocks */ -#ifdef _USE_BUDDY_BLOCKS - Unlink(ptr); -#else - linked = TRUE; /* it's already on the free list */ -#endif - } - - /* if the next physical block is free, merge it with this block. */ - PBLOCK next = ptr + size; /* point to next physical block */ - size_t nsize = SIZE(next); - if((nsize&1) == 0) { - /* block is free move rover if needed */ - if(m_pRover == next) - m_pRover = NEXT(next); - - /* unlink the next block from the free list. */ - Unlink(next); - - /* merge the sizes of this block and the next block. */ - size += nsize; - } - - /* Set the boundary tags for the block; */ - SetTags(ptr, size); - - /* Link the block to the head of the free list. */ -#ifdef _USE_BUDDY_BLOCKS - AddToFreeList(ptr, size); -#else - if(!linked) { - AddToFreeList(ptr, m_pFreeList); - } -#endif -} - -void VMem::GetLock(void) -{ - EnterCriticalSection(&m_cs); -} - -void VMem::FreeLock(void) -{ - LeaveCriticalSection(&m_cs); -} - -int VMem::IsLocked(void) -{ -#if 0 - /* XXX TryEnterCriticalSection() is not available in some versions - * of Windows 95. Since this code is not used anywhere yet, we - * skirt the issue for now. */ - BOOL bAccessed = TryEnterCriticalSection(&m_cs); - if(bAccessed) { - LeaveCriticalSection(&m_cs); - } - return !bAccessed; -#else - ASSERT(0); /* alarm bells for when somebody calls this */ - return 0; -#endif -} - - -long VMem::Release(void) -{ - long lCount = InterlockedDecrement(&m_lRefCount); - if(!lCount) - delete this; - return lCount; -} - -long VMem::AddRef(void) -{ - long lCount = InterlockedIncrement(&m_lRefCount); - return lCount; -} - - -int VMem::Getmem(size_t requestSize) -{ /* returns -1 is successful 0 if not */ -#ifdef USE_BIGBLOCK_ALLOC - BOOL bBigBlock; -#endif - void *ptr; - - /* Round up size to next multiple of 64K. */ - size_t size = (size_t)ROUND_UP64K(requestSize); - - /* - * if the size requested is smaller than our current allocation size - * adjust up - */ - if(size < (unsigned long)m_lAllocSize) - size = m_lAllocSize; - - /* Update the size to allocate on the next request */ - if(m_lAllocSize != lAllocMax) - m_lAllocSize <<= 2; - -#ifndef _USE_BUDDY_BLOCKS - if(m_nHeaps != 0 -#ifdef USE_BIGBLOCK_ALLOC - && !m_heaps[m_nHeaps-1].bBigBlock -#endif - ) { - /* Expand the last allocated heap */ - ptr = HeapReAlloc(m_hHeap, HEAP_REALLOC_IN_PLACE_ONLY|HEAP_NO_SERIALIZE, - m_heaps[m_nHeaps-1].base, - m_heaps[m_nHeaps-1].len + size); - if(ptr != 0) { - HeapAdd(((char*)ptr) + m_heaps[m_nHeaps-1].len, size -#ifdef USE_BIGBLOCK_ALLOC - , FALSE -#endif - ); - return -1; - } - } -#endif /* _USE_BUDDY_BLOCKS */ - - /* - * if we didn't expand a block to cover the requested size - * allocate a new Heap - * the size of this block must include the additional dummy tags at either end - * the above ROUND_UP64K may not have added any memory to include this. - */ - if(size == requestSize) - size = (size_t)ROUND_UP64K(requestSize+(blockOverhead)); - -Restart: -#ifdef _USE_BUDDY_BLOCKS - ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); -#else -#ifdef USE_BIGBLOCK_ALLOC - bBigBlock = FALSE; - if (size >= nMaxHeapAllocSize) { - bBigBlock = TRUE; - ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); - } - else -#endif - ptr = HeapAlloc(m_hHeap, HEAP_NO_SERIALIZE, size); -#endif /* _USE_BUDDY_BLOCKS */ - - if (!ptr) { - /* try to allocate a smaller chunk */ - size >>= 1; - if(size > requestSize) - goto Restart; - } - - if(ptr == 0) { - MEMODSlx("HeapAlloc failed on size!!!", size); - return 0; - } - -#ifdef _USE_BUDDY_BLOCKS - if (HeapAdd(ptr, size)) { - VirtualFree(ptr, 0, MEM_RELEASE); - return 0; - } -#else -#ifdef USE_BIGBLOCK_ALLOC - if (HeapAdd(ptr, size, bBigBlock)) { - if (bBigBlock) { - VirtualFree(ptr, 0, MEM_RELEASE); - } - } -#else - HeapAdd(ptr, size); -#endif -#endif /* _USE_BUDDY_BLOCKS */ - return -1; -} - -int VMem::HeapAdd(void* p, size_t size -#ifdef USE_BIGBLOCK_ALLOC - , BOOL bBigBlock -#endif - ) -{ /* if the block can be succesfully added to the heap, returns 0; otherwise -1. */ - int index; - - /* Check size, then round size down to next long word boundary. */ - if(size < minAllocSize) - return -1; - - size = (size_t)ROUND_DOWN(size); - PBLOCK ptr = (PBLOCK)p; - -#ifdef USE_BIGBLOCK_ALLOC - if (!bBigBlock) { -#endif - /* - * Search for another heap area that's contiguous with the bottom of this new area. - * (It should be extremely unusual to find one that's contiguous with the top). - */ - for(index = 0; index < m_nHeaps; ++index) { - if(ptr == m_heaps[index].base + (int)m_heaps[index].len) { - /* - * The new block is contiguous with a previously allocated heap area. Add its - * length to that of the previous heap. Merge it with the dummy end-of-heap - * area marker of the previous heap. - */ - m_heaps[index].len += size; - break; - } - } -#ifdef USE_BIGBLOCK_ALLOC - } - else { - index = m_nHeaps; - } -#endif - - if(index == m_nHeaps) { - /* The new block is not contiguous, or is BigBlock. Add it to the heap list. */ - if(m_nHeaps == maxHeaps) { - return -1; /* too many non-contiguous heaps */ - } - m_heaps[m_nHeaps].base = ptr; - m_heaps[m_nHeaps].len = size; -#ifdef USE_BIGBLOCK_ALLOC - m_heaps[m_nHeaps].bBigBlock = bBigBlock; -#endif - m_nHeaps++; - - /* - * Reserve the first LONG in the block for the ending boundary tag of a dummy - * block at the start of the heap area. - */ - size -= blockOverhead; - ptr += blockOverhead; - PSIZE(ptr) = 1; /* mark the dummy previous block as allocated */ - } - - /* - * Convert the heap to one large block. Set up its boundary tags, and those of - * marker block after it. The marker block before the heap will already have - * been set up if this heap is not contiguous with the end of another heap. - */ - SetTags(ptr, size | 1); - PBLOCK next = ptr + size; /* point to dummy end block */ - SIZE(next) = 1; /* mark the dummy end block as allocated */ - - /* - * Link the block to the start of the free list by calling free(). - * This will merge the block with any adjacent free blocks. - */ - Free(ptr); - return 0; -} - - -void* VMem::Expand(void* block, size_t size) -{ - /* - * Disallow negative or zero sizes. - */ - size_t realsize = CalcAllocSize(size); - if((int)realsize < minAllocSize || size == 0) - return NULL; - - PBLOCK ptr = (PBLOCK)block; - - /* if the current size is the same as requested, do nothing. */ - size_t cursize = SIZE(ptr) & ~1; - if(cursize == realsize) { - return block; - } - - /* if the block is being shrunk, convert the remainder of the block into a new free block. */ - if(realsize <= cursize) { - size_t nextsize = cursize - realsize; /* size of new remainder block */ - if(nextsize >= minAllocSize) { - /* - * Split the block - * Set boundary tags for the resized block and the new block. - */ - SetTags(ptr, realsize | 1); - ptr += realsize; - - /* - * add the new block to the free list. - * call Free to merge this block with next block if free - */ - SetTags(ptr, nextsize | 1); - Free(ptr); - } - - return block; - } - - PBLOCK next = ptr + cursize; - size_t nextsize = SIZE(next); - - /* Check the next block for consistency.*/ - if((nextsize&1) == 0 && (nextsize + cursize) >= realsize) { - /* - * The next block is free and big enough. Add the part that's needed - * to our block, and split the remainder off into a new block. - */ - if(m_pRover == next) - m_pRover = NEXT(next); - - /* Unlink the next block from the free list. */ - Unlink(next); - cursize += nextsize; /* combine sizes */ - - size_t rem = cursize - realsize; /* size of remainder */ - if(rem >= minAllocSize) { - /* - * The remainder is big enough to be a new block. - * Set boundary tags for the resized block and the new block. - */ - next = ptr + realsize; - /* - * add the new block to the free list. - * next block cannot be free - */ - SetTags(next, rem); -#ifdef _USE_BUDDY_BLOCKS - AddToFreeList(next, rem); -#else - AddToFreeList(next, m_pFreeList); -#endif - cursize = realsize; - } - /* Set the boundary tags to mark it as allocated. */ - SetTags(ptr, cursize | 1); - return ((void *)ptr); - } - return NULL; -} - -#ifdef _DEBUG_MEM -#define LOG_FILENAME ".\\MemLog.txt" - -void VMem::MemoryUsageMessage(char *str, long x, long y, int c) -{ - char szBuffer[512]; - if(str) { - if(!m_pLog) - m_pLog = fopen(LOG_FILENAME, "w"); - sprintf(szBuffer, str, x, y, c); - fputs(szBuffer, m_pLog); - } - else { - if(m_pLog) { - fflush(m_pLog); - fclose(m_pLog); - m_pLog = 0; - } - } -} - -void VMem::WalkHeap(int complete) -{ - if(complete) { - MemoryUsageMessage(NULL, 0, 0, 0); - size_t total = 0; - for(int i = 0; i < m_nHeaps; ++i) { - total += m_heaps[i].len; - } - MemoryUsageMessage("VMem heaps used %d. Total memory %08x\n", m_nHeaps, total, 0); - - /* Walk all the heaps - verify structures */ - for(int index = 0; index < m_nHeaps; ++index) { - PBLOCK ptr = m_heaps[index].base; - size_t size = m_heaps[index].len; -#ifndef _USE_BUDDY_BLOCKS -#ifdef USE_BIGBLOCK_ALLOC - if (!m_heaps[m_nHeaps].bBigBlock) -#endif - ASSERT(HeapValidate(m_hHeap, HEAP_NO_SERIALIZE, ptr)); -#endif - - /* set over reserved header block */ - size -= blockOverhead; - ptr += blockOverhead; - PBLOCK pLast = ptr + size; - ASSERT(PSIZE(ptr) == 1); /* dummy previous block is allocated */ - ASSERT(SIZE(pLast) == 1); /* dummy next block is allocated */ - while(ptr < pLast) { - ASSERT(ptr > m_heaps[index].base); - size_t cursize = SIZE(ptr) & ~1; - ASSERT((PSIZE(ptr+cursize) & ~1) == cursize); - MemoryUsageMessage("Memory Block %08x: Size %08x %c\n", (long)ptr, cursize, (SIZE(ptr)&1) ? 'x' : ' '); - if(!(SIZE(ptr)&1)) { - /* this block is on the free list */ - PBLOCK tmp = NEXT(ptr); - while(tmp != ptr) { - ASSERT((SIZE(tmp)&1)==0); - if(tmp == m_pFreeList) - break; - ASSERT(NEXT(tmp)); - tmp = NEXT(tmp); - } - if(tmp == ptr) { - MemoryUsageMessage("Memory Block %08x: Size %08x free but not in free list\n", (long)ptr, cursize, 0); - } - } - ptr += cursize; - } - } - MemoryUsageMessage(NULL, 0, 0, 0); - } -} -#endif /* _DEBUG_MEM */ - -#endif /* _USE_MSVCRT_MEM_ALLOC */ - -#endif /* ___VMEM_H_INC___ */ diff --git a/wince/win32.h b/wince/win32.h deleted file mode 100644 index 6ff870ff1e..0000000000 --- a/wince/win32.h +++ /dev/null @@ -1,486 +0,0 @@ -/* Time-stamp: <01/08/01 20:59:54 keuchel@w2k> */ - -/* WIN32.H - * - * (c) 1995 Microsoft Corporation. All rights reserved. - * Developed by hip communications inc., http://info.hip.com/info/ - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - */ - -#ifndef _INC_WIN32_PERL5 -#define _INC_WIN32_PERL5 - -#ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0400 /* needed for TryEnterCriticalSection() etc. */ -#endif - -#if defined(PERL_IMPLICIT_SYS) -# define DYNAMIC_ENV_FETCH -# define ENV_HV_NAME "___ENV_HV_NAME___" -# define HAS_GETENV_LEN -# define prime_env_iter() -# define WIN32IO_IS_STDIO /* don't pull in custom stdio layer */ -# define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */ -# ifdef PERL_GLOBAL_STRUCT -# error PERL_GLOBAL_STRUCT cannot be defined with PERL_IMPLICIT_SYS -# endif -# define win32_get_privlib PerlEnv_lib_path -# define win32_get_sitelib PerlEnv_sitelib_path -# define win32_get_vendorlib PerlEnv_vendorlib_path -#endif - -#ifdef __GNUC__ -# ifndef __int64 /* some versions seem to #define it already */ -# define __int64 long long -# endif -# define Win32_Winsock -#endif - -/* Define DllExport akin to perl's EXT, - * If we are in the DLL or mimicing the DLL for Win95 work round - * then Export the symbol, - * otherwise import it. - */ - -/* now even GCC supports __declspec() */ - -#if defined(PERLDLL) || defined(WIN95FIX) -#define DllExport -/*#define DllExport __declspec(dllexport)*/ /* noises with VC5+sp3 */ -#else -#define DllExport __declspec(dllimport) -#endif - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -#ifdef WIN32_LEAN_AND_MEAN /* C file is NOT a Perl5 original. */ -#define CONTEXT PERL_CONTEXT /* Avoid conflict of CONTEXT defs. */ -#endif /*WIN32_LEAN_AND_MEAN */ - -#ifndef TLS_OUT_OF_INDEXES -#define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF -#endif - -#include <dirent.h> -#ifndef UNDER_CE -#include <io.h> -#include <process.h> -#include <direct.h> -#include <fcntl.h> -#endif -#include <stdio.h> -#include <stdlib.h> -#ifndef EXT -#include "EXTERN.h" -#endif - -struct tms { - long tms_utime; - long tms_stime; - long tms_cutime; - long tms_cstime; -}; - -#ifndef SYS_NMLN -#define SYS_NMLN 257 -#endif - -struct utsname { - char sysname[SYS_NMLN]; - char nodename[SYS_NMLN]; - char release[SYS_NMLN]; - char version[SYS_NMLN]; - char machine[SYS_NMLN]; -}; - -#ifndef START_EXTERN_C -#undef EXTERN_C -#ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } -# define EXTERN_C extern "C" -#else -# define START_EXTERN_C -# define END_EXTERN_C -# define EXTERN_C -#endif -#endif - -#define STANDARD_C 1 -#define DOSISH 1 /* no escaping our roots */ -#define OP_BINARY O_BINARY /* mistake in in pp_sys.c? */ - -/* Define USE_SOCKETS_AS_HANDLES to enable emulation of windows sockets as - * real filehandles. XXX Should always be defined (the other version is untested) */ - -#define USE_SOCKETS_AS_HANDLES - -/* read() and write() aren't transparent for socket handles */ -#define PERL_SOCK_SYSREAD_IS_RECV -#define PERL_SOCK_SYSWRITE_IS_SEND - -#define PERL_NO_FORCE_LINK /* no need for PL_force_link_funcs */ - -/* if USE_WIN32_RTL_ENV is not defined, Perl uses direct Win32 calls - * to read the environment, bypassing the runtime's (usually broken) - * facilities for accessing the same. See note in util.c/my_setenv(). */ -/*#define USE_WIN32_RTL_ENV */ - -/* Define USE_FIXED_OSFHANDLE to fix MSVCRT's _open_osfhandle() on W95. - It now uses some black magic to work seamlessly with the DLL CRT and - works with MSVC++ 4.0+ or GCC/Mingw32 - -- BKS 1-24-2000 */ -#if (defined(_M_IX86) && _MSC_VER >= 1000) || defined(__MINGW32__) -#define USE_FIXED_OSFHANDLE -#endif - -#define ENV_IS_CASELESS - -#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers don't have this */ -#define VER_PLATFORM_WIN32_WINDOWS 1 -#endif - -#ifndef FILE_SHARE_DELETE /* VC-4.0 headers don't have this */ -#define FILE_SHARE_DELETE 0x00000004 -#endif - -/* access() mode bits */ -#ifndef R_OK -# define R_OK 4 -# define W_OK 2 -# define X_OK 1 -# define F_OK 0 -#endif - -#define PERL_GET_CONTEXT_DEFINED - -/* Compiler-specific stuff. */ - -#ifdef __BORLANDC__ /* Borland C++ */ - -#define _access access -#define _chdir chdir -#define _getpid getpid -#define wcsicmp _wcsicmp -#include <sys/types.h> - -#ifndef DllMain -#define DllMain DllEntryPoint -#endif - -#pragma warn -ccc /* "condition is always true/false" */ -#pragma warn -rch /* "unreachable code" */ -#pragma warn -sig /* "conversion may lose significant digits" */ -#pragma warn -pia /* "possibly incorrect assignment" */ -#pragma warn -par /* "parameter 'foo' is never used" */ -#pragma warn -aus /* "'foo' is assigned a value that is never used" */ -#pragma warn -use /* "'foo' is declared but never used" */ -#pragma warn -csu /* "comparing signed and unsigned values" */ -#pragma warn -pro /* "call to function with no prototype" */ -#pragma warn -stu /* "undefined structure 'foo'" */ - -/* Borland C thinks that a pointer to a member variable is 12 bytes in size. */ -#define PERL_MEMBER_PTR_SIZE 12 - -#endif - -#ifdef _MSC_VER /* Microsoft Visual C++ */ - -#ifndef _MODE_T_DEFINED_ -typedef unsigned long mode_t; -#define _MODE_T_DEFINED_ -#endif - -#pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761) - -/* Visual C thinks that a pointer to a member variable is 16 bytes in size. */ -#define PERL_MEMBER_PTR_SIZE 16 - -#endif /* _MSC_VER */ - -#ifdef __MINGW32__ /* Minimal Gnu-Win32 */ - -typedef long uid_t; -typedef long gid_t; -#ifndef _environ -#define _environ environ -#endif -#define flushall _flushall -#define fcloseall _fcloseall - -#endif /* __MINGW32__ */ - -#ifndef _O_NOINHERIT -# define _O_NOINHERIT 0x0080 -# ifndef _NO_OLDNAMES -# define O_NOINHERIT _O_NOINHERIT -# endif -#endif - -/* both GCC/Mingw32 and MSVC++ 4.0 are missing this, so we put it here */ -#ifndef CP_UTF8 -# define CP_UTF8 65001 -#endif - -/* compatibility stuff for other compilers goes here */ - -#ifndef _INTPTR_T_DEFINED -typedef int intptr_t; -# define _INTPTR_T_DEFINED -#endif - -#ifndef _UINTPTR_T_DEFINED -typedef unsigned int uintptr_t; -# define _UINTPTR_T_DEFINED -#endif - -START_EXTERN_C - -#undef Stat -#define Stat win32_stat - -#undef init_os_extras -#define init_os_extras Perl_init_os_extras - -DllExport void Perl_win32_init(int *argcp, char ***argvp); -DllExport void Perl_win32_term(void); -DllExport void Perl_init_os_extras(); -DllExport void win32_str_os_error(void *sv, DWORD err); -DllExport int RunPerl(int argc, char **argv, char **env); - -typedef struct { - HANDLE childStdIn; - HANDLE childStdOut; - HANDLE childStdErr; - /* - * the following correspond to the fields of the same name - * in the STARTUPINFO structure. Embedders can use these to - * control the spawning process' look. - * Example - to hide the window of the spawned process: - * dwFlags = STARTF_USESHOWWINDOW; - * wShowWindow = SW_HIDE; - */ - DWORD dwFlags; - DWORD dwX; - DWORD dwY; - DWORD dwXSize; - DWORD dwYSize; - DWORD dwXCountChars; - DWORD dwYCountChars; - DWORD dwFillAttribute; - WORD wShowWindow; -} child_IO_table; - -DllExport void win32_get_child_IO(child_IO_table* ptr); - -#ifndef USE_SOCKETS_AS_HANDLES -extern FILE * my_fdopen(int, char *); -#endif - -extern int my_fclose(FILE *); -extern int do_aspawn(void *really, void **mark, void **sp); -extern int do_spawn(char *cmd); -extern int do_spawn_nowait(char *cmd); -extern char * win32_get_privlib(const char *pl); -extern char * win32_get_sitelib(const char *pl); -extern char * win32_get_vendorlib(const char *pl); -extern int IsWin95(void); -extern int IsWinNT(void); -extern void win32_argv2utf8(int argc, char** argv); - -#ifdef PERL_IMPLICIT_SYS -extern void win32_delete_internal_host(void *h); -#endif - -extern char * staticlinkmodules[]; - -END_EXTERN_C - -/* - * handle socket stuff, assuming socket is always available - */ - -#include <sys/socket.h> -#include <netdb.h> - -#ifdef MYMALLOC -#define EMBEDMYMALLOC /**/ -/* #define USE_PERL_SBRK /**/ -/* #define PERL_SBRK_VIA_MALLOC /**/ -#endif - -#if defined(PERLDLL) && !defined(PERL_CORE) -#define PERL_CORE -#endif - -#ifdef PERL_TEXTMODE_SCRIPTS -# define PERL_SCRIPT_MODE "r" -#else -# define PERL_SCRIPT_MODE "rb" -#endif - -#ifndef Sighandler_t -typedef Signal_t (*Sighandler_t) (int); -#define Sighandler_t Sighandler_t -#endif - -/* - * Now Win32 specific per-thread data stuff - */ - -struct thread_intern { - /* XXX can probably use one buffer instead of several */ - char Wstrerror_buffer[512]; - struct servent Wservent; - char Wgetlogin_buffer[128]; -# ifdef USE_SOCKETS_AS_HANDLES - int Winit_socktype; -# endif -# ifdef HAVE_DES_FCRYPT - char Wcrypt_buffer[30]; -# endif -# ifdef USE_RTL_THREAD_API - void * retv; /* slot for thread return value */ -# endif - BOOL Wuse_showwindow; - WORD Wshowwindow; -}; - -#define HAVE_INTERP_INTERN -typedef struct { - long num; - DWORD pids[MAXIMUM_WAIT_OBJECTS]; - HANDLE handles[MAXIMUM_WAIT_OBJECTS]; -} child_tab; - -struct interp_intern { - char * perlshell_tokens; - char ** perlshell_vec; - long perlshell_items; - struct av * fdpid; - child_tab * children; -#ifdef USE_ITHREADS - DWORD pseudo_id; - child_tab * pseudo_children; -#endif - void * internal_host; - struct thread_intern thr_intern; - UINT timerid; - unsigned poll_count; - Sighandler_t sigtable[SIG_SIZE]; -}; - -DllExport int win32_async_check(pTHX); - -#define WIN32_POLL_INTERVAL 32768 -#define PERL_ASYNC_CHECK() if (w32_do_async || PL_sig_pending) win32_async_check(aTHX) - -#define w32_perlshell_tokens (PL_sys_intern.perlshell_tokens) -#define w32_perlshell_vec (PL_sys_intern.perlshell_vec) -#define w32_perlshell_items (PL_sys_intern.perlshell_items) -#define w32_fdpid (PL_sys_intern.fdpid) -#define w32_children (PL_sys_intern.children) -#define w32_num_children (w32_children->num) -#define w32_child_pids (w32_children->pids) -#define w32_child_handles (w32_children->handles) -#define w32_pseudo_id (PL_sys_intern.pseudo_id) -#define w32_pseudo_children (PL_sys_intern.pseudo_children) -#define w32_num_pseudo_children (w32_pseudo_children->num) -#define w32_pseudo_child_pids (w32_pseudo_children->pids) -#define w32_pseudo_child_handles (w32_pseudo_children->handles) -#define w32_internal_host (PL_sys_intern.internal_host) -#define w32_timerid (PL_sys_intern.timerid) -#define w32_sighandler (PL_sys_intern.sigtable) -#define w32_poll_count (PL_sys_intern.poll_count) -#define w32_do_async (w32_poll_count++ > WIN32_POLL_INTERVAL) -#define w32_strerror_buffer (PL_sys_intern.thr_intern.Wstrerror_buffer) -#define w32_getlogin_buffer (PL_sys_intern.thr_intern.Wgetlogin_buffer) -#define w32_crypt_buffer (PL_sys_intern.thr_intern.Wcrypt_buffer) -#define w32_servent (PL_sys_intern.thr_intern.Wservent) -#define w32_init_socktype (PL_sys_intern.thr_intern.Winit_socktype) -#define w32_use_showwindow (PL_sys_intern.thr_intern.Wuse_showwindow) -#define w32_showwindow (PL_sys_intern.thr_intern.Wshowwindow) - -#ifdef USE_ITHREADS -# define PERL_WAIT_FOR_CHILDREN \ - STMT_START { \ - if (w32_pseudo_children && w32_num_pseudo_children) { \ - long children = w32_num_pseudo_children; \ - WaitForMultipleObjects(children, \ - w32_pseudo_child_handles, \ - TRUE, INFINITE); \ - while (children) \ - CloseHandle(w32_pseudo_child_handles[--children]); \ - } \ - } STMT_END -#endif - -#if defined(USE_FIXED_OSFHANDLE) || defined(PERL_MSVCRT_READFIX) -#ifdef PERL_CORE - -/* C doesn't like repeat struct definitions */ -#ifndef _CRTIMP -#define _CRTIMP __declspec(dllimport) -#endif - -/* - * Control structure for lowio file handles - */ -typedef struct { - intptr_t osfhnd;/* underlying OS file HANDLE */ - char osfile; /* attributes of file (e.g., open in text mode?) */ - char pipech; /* one char buffer for handles opened on pipes */ - int lockinitflag; - CRITICAL_SECTION lock; -} ioinfo; - - -/* - * Array of arrays of control structures for lowio files. - */ -EXTERN_C _CRTIMP ioinfo* __pioinfo[]; - -/* - * Definition of IOINFO_L2E, the log base 2 of the number of elements in each - * array of ioinfo structs. - */ -#define IOINFO_L2E 5 - -/* - * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array - */ -#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) - -/* - * Access macros for getting at an ioinfo struct and its fields from a - * file handle - */ -#define _pioinfo(i) (__pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1))) -#define _osfhnd(i) (_pioinfo(i)->osfhnd) -#define _osfile(i) (_pioinfo(i)->osfile) -#define _pipech(i) (_pioinfo(i)->pipech) - -/* since we are not doing a dup2(), this works fine */ -#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = (intptr_t)osfh) -#endif -#endif - -/* IO.xs and POSIX.xs define PERLIO_NOT_STDIO to 1 */ -#if defined(PERL_EXT_IO) || defined(PERL_EXT_POSIX) -#undef PERLIO_NOT_STDIO -#endif -#define PERLIO_NOT_STDIO 0 - -#include "perlio.h" - -/* - * This provides a layer of functions and macros to ensure extensions will - * get to use the same RTL functions as the core. - */ -#include "win32iop.h" - -#endif /* _INC_WIN32_PERL5 */ - diff --git a/wince/win32io.c b/wince/win32io.c deleted file mode 100644 index 857f25be13..0000000000 --- a/wince/win32io.c +++ /dev/null @@ -1,377 +0,0 @@ -#define PERL_NO_GET_CONTEXT -#define WIN32_LEAN_AND_MEAN -#define WIN32IO_IS_STDIO -#include <tchar.h> -#ifdef __GNUC__ -#define Win32_Winsock -#endif -#include <windows.h> -#include <cewin32.h> - -#include <sys/stat.h> -#include "EXTERN.h" -#include "perl.h" - -#ifdef PERLIO_LAYERS - -#include "perliol.h" - -#define NO_XSLOCKS -#include "XSUB.h" - - -/* Bottom-most level for Win32 case */ - -typedef struct -{ - struct _PerlIO base; /* The generic part */ - HANDLE h; /* OS level handle */ - IV refcnt; /* REFCNT for the "fd" this represents */ - int fd; /* UNIX like file descriptor - index into fdtable */ -} PerlIOWin32; - -PerlIOWin32 *fdtable[256]; -IV max_open_fd = -1; - -IV -PerlIOWin32_popped(pTHX_ PerlIO *f) -{ - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - if (--s->refcnt > 0) - { - *f = PerlIOBase(f)->next; - return 1; - } - fdtable[s->fd] = NULL; - return 0; -} - -IV -PerlIOWin32_fileno(pTHX_ PerlIO *f) -{ - return PerlIOSelf(f,PerlIOWin32)->fd; -} - -IV -PerlIOWin32_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) -{ - IV code = PerlIOBase_pushed(aTHX_ f,mode,arg,tab); - if (*PerlIONext(f)) - { - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - s->fd = PerlIO_fileno(PerlIONext(f)); - } - PerlIOBase(f)->flags |= PERLIO_F_OPEN; - return code; -} - -PerlIO * -PerlIOWin32_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args) -{ - const char *tmode = mode; - HANDLE h = INVALID_HANDLE_VALUE; - if (f) - { - /* Close if already open */ - if (PerlIOBase(f)->flags & PERLIO_F_OPEN) - (*PerlIOBase(f)->tab->Close)(aTHX_ f); - } - if (narg > 0) - { - char *path = SvPV_nolen(*args); - DWORD access = 0; - DWORD share = 0; - DWORD create = -1; - DWORD attr = FILE_ATTRIBUTE_NORMAL; - if (*mode == '#') - { - /* sysopen - imode is UNIX-like O_RDONLY etc. - - do_open has converted that back to string form in mode as well - - perm is UNIX like permissions - */ - mode++; - } - else - { - /* Normal open - decode mode string */ - } - switch(*mode) - { - case 'r': - access = GENERIC_READ; - create = OPEN_EXISTING; - if (*++mode == '+') - { - access |= GENERIC_WRITE; - create = OPEN_ALWAYS; - mode++; - } - break; - - case 'w': - access = GENERIC_WRITE; - create = TRUNCATE_EXISTING; - if (*++mode == '+') - { - access |= GENERIC_READ; - mode++; - } - break; - - case 'a': - access = GENERIC_WRITE; - create = OPEN_ALWAYS; - if (*++mode == '+') - { - access |= GENERIC_READ; - mode++; - } - break; - } - if (*mode == 'b') - { - mode++; - } - else if (*mode == 't') - { - mode++; - } - if (*mode || create == -1) - { - //FIX-ME: SETERRNO(EINVAL,LIB$_INVARG); - XCEMessageBoxA(NULL, "NEED TO IMPLEMENT a place in ../wince/win32io.c", "Perl(developer)", 0); - return NULL; - } - if (!(access & GENERIC_WRITE)) - share = FILE_SHARE_READ; - h = CreateFileW(path,access,share,NULL,create,attr,NULL); - if (h == INVALID_HANDLE_VALUE) - { - if (create == TRUNCATE_EXISTING) - h = CreateFileW(path,access,share,NULL,(create = OPEN_ALWAYS),attr,NULL); - } - } - else - { - /* fd open */ - h = INVALID_HANDLE_VALUE; - if (fd >= 0 && fd <= max_open_fd) - { - PerlIOWin32 *s = fdtable[fd]; - if (s) - { - s->refcnt++; - if (!f) - f = PerlIO_allocate(aTHX); - *f = &s->base; - return f; - } - } - if (*mode == 'I') - { - mode++; - switch(fd) - { - case 0: - h = XCEGetStdHandle(STD_INPUT_HANDLE); - break; - case 1: - h = XCEGetStdHandle(STD_OUTPUT_HANDLE); - break; - case 2: - h = XCEGetStdHandle(STD_ERROR_HANDLE); - break; - } - } - } - if (h != INVALID_HANDLE_VALUE) - fd = win32_open_osfhandle((intptr_t) h, PerlIOUnix_oflags(tmode)); - if (fd >= 0) - { - PerlIOWin32 *s; - if (!f) - f = PerlIO_allocate(aTHX); - s = PerlIOSelf(PerlIO_push(aTHX_ f,self,tmode,PerlIOArg),PerlIOWin32); - s->h = h; - s->fd = fd; - s->refcnt = 1; - if (fd >= 0) - { - fdtable[fd] = s; - if (fd > max_open_fd) - max_open_fd = fd; - } - return f; - } - if (f) - { - /* FIXME: pop layers ??? */ - } - return NULL; -} - -SSize_t -PerlIOWin32_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) -{ - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - DWORD len; - if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD)) - return 0; - if (ReadFile(s->h,vbuf,count,&len,NULL)) - { - return len; - } - else - { - if (GetLastError() != NO_ERROR) - { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - return -1; - } - else - { - if (count != 0) - PerlIOBase(f)->flags |= PERLIO_F_EOF; - return 0; - } - } -} - -SSize_t -PerlIOWin32_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) -{ - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - DWORD len; - if (WriteFile(s->h,vbuf,count,&len,NULL)) - { - return len; - } - else - { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - return -1; - } -} - -IV -PerlIOWin32_seek(pTHX_ PerlIO *f, Off_t offset, int whence) -{ - static const DWORD where[3] = { FILE_BEGIN, FILE_CURRENT, FILE_END }; - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - DWORD high = (sizeof(offset) > sizeof(DWORD)) ? (DWORD)(offset >> 32) : 0; - DWORD low = (DWORD) offset; - DWORD res = SetFilePointer(s->h,low,&high,where[whence]); - if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR) - { - return 0; - } - else - { - return -1; - } -} - -Off_t -PerlIOWin32_tell(pTHX_ PerlIO *f) -{ - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - DWORD high = 0; - DWORD res = SetFilePointer(s->h,0,&high,FILE_CURRENT); - if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR) - { - return ((Off_t) high << 32) | res; - } - return (Off_t) -1; -} - -IV -PerlIOWin32_close(pTHX_ PerlIO *f) -{ - PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); - if (s->refcnt == 1) - { - IV code = 0; -#if 0 - /* This does not do pipes etc. correctly */ - if (!CloseHandle(s->h)) - { - s->h = INVALID_HANDLE_VALUE; - return -1; - } -#else - PerlIOBase(f)->flags &= ~PERLIO_F_OPEN; - return win32_close(s->fd); -#endif - } - return 0; -} - -PerlIO * -PerlIOWin32_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *params, int flags) -{ - PerlIOWin32 *os = PerlIOSelf(f,PerlIOWin32); - HANDLE proc = GetCurrentProcess(); - HANDLE new; - if (DuplicateHandle(proc, os->h, proc, &new, 0, FALSE, DUPLICATE_SAME_ACCESS)) - { - char mode[8]; - int fd = win32_open_osfhandle((intptr_t) new, PerlIOUnix_oflags(PerlIO_modestr(o,mode))); - if (fd >= 0) - { - f = PerlIOBase_dup(aTHX_ f, o, params, flags); - if (f) - { - PerlIOWin32 *fs = PerlIOSelf(f,PerlIOWin32); - fs->h = new; - fs->fd = fd; - fs->refcnt = 1; - fdtable[fd] = fs; - if (fd > max_open_fd) - max_open_fd = fd; - } - else - { - win32_close(fd); - } - } - else - { - CloseHandle(new); - } - } - return f; -} - -PerlIO_funcs PerlIO_win32 = { - sizeof(PerlIO_funcs), - "win32", - sizeof(PerlIOWin32), - PERLIO_K_RAW, - PerlIOWin32_pushed, - PerlIOWin32_popped, - PerlIOWin32_open, - PerlIOBase_binmode, - NULL, /* getarg */ - PerlIOWin32_fileno, - PerlIOWin32_dup, - PerlIOWin32_read, - PerlIOBase_unread, - PerlIOWin32_write, - PerlIOWin32_seek, - PerlIOWin32_tell, - PerlIOWin32_close, - PerlIOBase_noop_ok, /* flush */ - PerlIOBase_noop_fail, /* fill */ - PerlIOBase_eof, - PerlIOBase_error, - PerlIOBase_clearerr, - PerlIOBase_setlinebuf, - NULL, /* get_base */ - NULL, /* get_bufsiz */ - NULL, /* get_ptr */ - NULL, /* get_cnt */ - NULL, /* set_ptrcnt */ -}; - -#endif - diff --git a/wince/win32iop.h b/wince/win32iop.h deleted file mode 100644 index 2b2703c8e0..0000000000 --- a/wince/win32iop.h +++ /dev/null @@ -1,344 +0,0 @@ -/* Time-stamp: <01/08/01 21:00:16 keuchel@w2k> */ - -#ifndef WIN32IOP_H -#define WIN32IOP_H - -#ifndef START_EXTERN_C -#ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } -# define EXTERN_C extern "C" -#else -# define START_EXTERN_C -# define END_EXTERN_C -# define EXTERN_C -#endif -#endif - -#ifndef UNDER_CE -#if defined(_MSC_VER) || defined(__MINGW32__) -# include <sys/utime.h> -#else -# include <utime.h> -#endif -#endif - -/* - * defines for flock emulation - */ -#define LOCK_SH 1 -#define LOCK_EX 2 -#define LOCK_NB 4 -#define LOCK_UN 8 - -/* - * Make this as close to original stdio as possible. - */ - -/* - * function prototypes for our own win32io layer - */ -START_EXTERN_C - -DllExport int * win32_errno(void); -DllExport char *** win32_environ(void); -DllExport FILE* win32_stdin(void); -DllExport FILE* win32_stdout(void); -DllExport FILE* win32_stderr(void); -DllExport int win32_ferror(FILE *fp); -DllExport int win32_feof(FILE *fp); -DllExport char* win32_strerror(int e); - -DllExport int win32_fprintf(FILE *pf, const char *format, ...); -DllExport int win32_printf(const char *format, ...); -DllExport int win32_vfprintf(FILE *pf, const char *format, va_list arg); -DllExport int win32_vprintf(const char *format, va_list arg); -DllExport size_t win32_fread(void *buf, size_t size, size_t count, FILE *pf); -DllExport size_t win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf); -DllExport FILE* win32_fopen(const char *path, const char *mode); -DllExport FILE* win32_fdopen(int fh, const char *mode); -DllExport FILE* win32_freopen(const char *path, const char *mode, FILE *pf); -DllExport int win32_fclose(FILE *pf); -DllExport int win32_fputs(const char *s,FILE *pf); -DllExport int win32_fputc(int c,FILE *pf); -DllExport int win32_ungetc(int c,FILE *pf); -DllExport int win32_getc(FILE *pf); -DllExport int win32_fileno(FILE *pf); -DllExport void win32_clearerr(FILE *pf); -DllExport int win32_fflush(FILE *pf); -DllExport long win32_ftell(FILE *pf); -DllExport int win32_fseek(FILE *pf,long offset,int origin); -DllExport int win32_fgetpos(FILE *pf,fpos_t *p); -DllExport int win32_fsetpos(FILE *pf,const fpos_t *p); -DllExport void win32_rewind(FILE *pf); -DllExport FILE* win32_tmpfile(void); -DllExport int win32_tmpfd(void); -DllExport void win32_abort(void); -DllExport int win32_fstat(int fd,struct stat *sbufptr); -DllExport int win32_stat(const char *name,struct stat *sbufptr); -DllExport int win32_pipe( int *phandles, unsigned int psize, int textmode ); -DllExport PerlIO* win32_popen( const char *command, const char *mode ); -DllExport PerlIO* win32_popenlist(const char *mode, IV narg, SV **args); -DllExport int win32_pclose( FILE *pf); -DllExport int win32_rename( const char *oname, const char *newname); -DllExport int win32_setmode( int fd, int mode); -DllExport int win32_chsize(int fd, Off_t size); -DllExport long win32_lseek( int fd, long offset, int origin); -DllExport long win32_tell( int fd); -DllExport int win32_dup( int fd); -DllExport int win32_dup2(int h1, int h2); -DllExport int win32_open(const char *path, int oflag,...); -DllExport int win32_close(int fd); -DllExport int win32_eof(int fd); -DllExport int win32_read(int fd, void *buf, unsigned int cnt); -DllExport int win32_write(int fd, const void *buf, unsigned int cnt); -DllExport int win32_spawnvp(int mode, const char *cmdname, - const char *const *argv); -DllExport int win32_mkdir(const char *dir, int mode); -DllExport int win32_rmdir(const char *dir); -DllExport int win32_chdir(const char *dir); -DllExport int win32_flock(int fd, int oper); -DllExport int win32_execv(const char *cmdname, const char *const *argv); -DllExport int win32_execvp(const char *cmdname, const char *const *argv); -DllExport void win32_perror(const char *str); -DllExport void win32_setbuf(FILE *pf, char *buf); -DllExport int win32_setvbuf(FILE *pf, char *buf, int type, size_t size); -DllExport int win32_flushall(void); -DllExport int win32_fcloseall(void); -DllExport char* win32_fgets(char *s, int n, FILE *pf); -DllExport char* win32_gets(char *s); -DllExport int win32_fgetc(FILE *pf); -DllExport int win32_putc(int c, FILE *pf); -DllExport int win32_puts(const char *s); -DllExport int win32_getchar(void); -DllExport int win32_putchar(int c); -DllExport void* win32_malloc(size_t size); -DllExport void* win32_calloc(size_t numitems, size_t size); -DllExport void* win32_realloc(void *block, size_t size); -DllExport void win32_free(void *block); - -DllExport int win32_open_osfhandle(long handle, int flags); -DllExport long win32_get_osfhandle(int fd); - -DllExport DIR* win32_opendir(char *filename); -DllExport struct direct* win32_readdir(DIR *dirp); -DllExport long win32_telldir(DIR *dirp); -DllExport void win32_seekdir(DIR *dirp, long loc); -DllExport void win32_rewinddir(DIR *dirp); -DllExport int win32_closedir(DIR *dirp); - -#ifndef USE_WIN32_RTL_ENV -DllExport char* win32_getenv(const char *name); -DllExport int win32_putenv(const char *name); -#endif - -DllExport unsigned win32_sleep(unsigned int); -DllExport int win32_times(struct tms *timebuf); -DllExport unsigned win32_alarm(unsigned int sec); -DllExport int win32_stat(const char *path, struct stat *buf); -DllExport char* win32_longpath(char *path); -DllExport int win32_ioctl(int i, unsigned int u, char *data); -DllExport int win32_link(const char *oldname, const char *newname); -DllExport int win32_gettimeofday(struct timeval *tp, void *not_used); -DllExport int win32_unlink(const char *f); -DllExport int win32_utime(const char *f, struct utimbuf *t); -DllExport int win32_uname(struct utsname *n); -DllExport int win32_wait(int *status); -DllExport int win32_waitpid(int pid, int *status, int flags); -DllExport int win32_kill(int pid, int sig); -DllExport unsigned long win32_os_id(void); -DllExport void* win32_dynaload(const char*filename); -DllExport int win32_access(const char *path, int mode); -DllExport int win32_chmod(const char *path, int mode); -DllExport int win32_getpid(void); -DllExport Sighandler_t win32_signal(int sig, Sighandler_t subcode); - -DllExport char * win32_crypt(const char *txt, const char *salt); - -END_EXTERN_C - -/* - * the following six(6) is #define in stdio.h - */ -#ifndef WIN32IO_IS_STDIO -#undef errno -#undef environ -#undef stderr -#undef stdin -#undef stdout -#undef ferror -#undef feof -#undef fclose -#undef pipe -#undef pause -#undef sleep -#undef times -#undef alarm -#undef ioctl -#undef unlink -#undef utime -#undef uname -#undef wait - -#ifdef __BORLANDC__ -#undef ungetc -#undef getc -#undef putc -#undef getchar -#undef putchar -#undef fileno -#endif - -#define stderr win32_stderr() -#define stdout win32_stdout() -#define stdin win32_stdin() -#define feof(f) win32_feof(f) -#define ferror(f) win32_ferror(f) -#define errno (*win32_errno()) -#define environ (*win32_environ()) -#define strerror win32_strerror - -/* - * redirect to our own version - */ -#undef fprintf -#define fprintf win32_fprintf -#undef vfprintf -#define vfprintf win32_vfprintf -#undef printf -#define printf win32_printf -#undef vprintf -#define vprintf win32_vprintf -#undef fread -#define fread(buf,size,count,f) win32_fread(buf,size,count,f) -#undef fwrite -#define fwrite(buf,size,count,f) win32_fwrite(buf,size,count,f) -#undef fopen -#define fopen win32_fopen -#undef fdopen -#define fdopen win32_fdopen -#undef freopen -#define freopen win32_freopen -#define fclose(f) win32_fclose(f) -#undef fputs -#define fputs(s,f) win32_fputs(s,f) -#undef fputc -#define fputc(c,f) win32_fputc(c,f) -#undef ungetc -#define ungetc(c,f) win32_ungetc(c,f) -#undef getc -#define getc(f) win32_getc(f) -#undef fileno -#define fileno(f) win32_fileno(f) -#undef clearerr -#define clearerr(f) win32_clearerr(f) -#undef fflush -#define fflush(f) win32_fflush(f) -#undef ftell -#define ftell(f) win32_ftell(f) -#undef fseek -#define fseek(f,o,w) win32_fseek(f,o,w) -#undef fgetpos -#define fgetpos(f,p) win32_fgetpos(f,p) -#undef fsetpos -#define fsetpos(f,p) win32_fsetpos(f,p) -#undef rewind -#define rewind(f) win32_rewind(f) -#define tmpfile() win32_tmpfile() -#define abort() win32_abort() -#define fstat(fd,bufptr) win32_fstat(fd,bufptr) -#define stat(pth,bufptr) win32_stat(pth,bufptr) -#define longpath(pth) win32_longpath(pth) -#define rename(old,new) win32_rename(old,new) -#define setmode(fd,mode) win32_setmode(fd,mode) -#define lseek(fd,offset,orig) win32_lseek(fd,offset,orig) -#define tell(fd) win32_tell(fd) -#define dup(fd) win32_dup(fd) -#define dup2(fd1,fd2) win32_dup2(fd1,fd2) -#define open win32_open -#define close(fd) win32_close(fd) -#define eof(fd) win32_eof(fd) -#define read(fd,b,s) win32_read(fd,b,s) -#define write(fd,b,s) win32_write(fd,b,s) -#define _open_osfhandle win32_open_osfhandle -#define _get_osfhandle win32_get_osfhandle -#define spawnvp win32_spawnvp -#define mkdir win32_mkdir -#define rmdir win32_rmdir -#define chdir win32_chdir -#define flock(fd,o) win32_flock(fd,o) -#define execv win32_execv -#define execvp win32_execvp -#define perror win32_perror -#define setbuf win32_setbuf -#undef setvbuf -#define setvbuf win32_setvbuf -#undef flushall -#define flushall win32_flushall -#undef fcloseall -#define fcloseall win32_fcloseall -#undef fgets -#define fgets win32_fgets -#undef gets -#define gets win32_gets -#undef fgetc -#define fgetc win32_fgetc -#undef putc -#define putc win32_putc -#undef puts -#define puts win32_puts -#undef getchar -#define getchar win32_getchar -#undef putchar -#define putchar win32_putchar -#define access(p,m) win32_access(p,m) -#define chmod(p,m) win32_chmod(p,m) - - -#if !defined(MYMALLOC) || !defined(PERL_CORE) -#undef malloc -#undef calloc -#undef realloc -#undef free -#define malloc win32_malloc -#define calloc win32_calloc -#define realloc win32_realloc -#define free win32_free -#endif - -#define pipe(fd) win32_pipe((fd), 512, O_BINARY) -#define pause() win32_sleep((32767L << 16) + 32767) -#define sleep win32_sleep -#define times win32_times -#define alarm win32_alarm -#define ioctl win32_ioctl -#define link win32_link -#define unlink win32_unlink -#define utime win32_utime -#define uname win32_uname -#define wait win32_wait -#define waitpid win32_waitpid -#define kill win32_kill - -#define opendir win32_opendir -#define readdir win32_readdir -#define telldir win32_telldir -#define seekdir win32_seekdir -#define rewinddir win32_rewinddir -#define closedir win32_closedir -#define os_id win32_os_id -#define getpid win32_getpid - -#undef crypt -#define crypt(t,s) win32_crypt(t,s) - -#ifndef USE_WIN32_RTL_ENV -#undef getenv -#define getenv win32_getenv -#undef putenv -#define putenv win32_putenv -#endif - -#endif /* WIN32IO_IS_STDIO */ -#endif /* WIN32IOP_H */ - diff --git a/wince/win32thread.c b/wince/win32thread.c deleted file mode 100644 index 1f327d6d41..0000000000 --- a/wince/win32thread.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "EXTERN.h" -#include "perl.h" - -#ifdef USE_DECLSPEC_THREAD -__declspec(thread) void *PL_current_context = NULL; -#endif - -void -Perl_set_context(void *t) -{ -#if defined(USE_ITHREADS) -# ifdef USE_DECLSPEC_THREAD - Perl_current_context = t; -# else - DWORD err = GetLastError(); - TlsSetValue(PL_thr_key,t); - SetLastError(err); -# endif -#endif -} - -void * -Perl_get_context(void) -{ -#if defined(USE_ITHREADS) -# ifdef USE_DECLSPEC_THREAD - return Perl_current_context; -# else - DWORD err = GetLastError(); - void *result = TlsGetValue(PL_thr_key); - SetLastError(err); - return result; -# endif -#else - return NULL; -#endif -} diff --git a/wince/win32thread.h b/wince/win32thread.h deleted file mode 100644 index f7f2cf1f4d..0000000000 --- a/wince/win32thread.h +++ /dev/null @@ -1,197 +0,0 @@ -#ifndef _WIN32THREAD_H -#define _WIN32THREAD_H - -#include "win32.h" - -typedef struct win32_cond { LONG waiters; HANDLE sem; } perl_cond; -typedef DWORD perl_key; -typedef HANDLE perl_os_thread; - -#ifndef DONT_USE_CRITICAL_SECTION - -/* Critical Sections used instead of mutexes: lightweight, - * but can't be communicated to child processes, and can't get - * HANDLE to it for use elsewhere. - */ -typedef CRITICAL_SECTION perl_mutex; -#define MUTEX_INIT(m) InitializeCriticalSection(m) -#define MUTEX_LOCK(m) EnterCriticalSection(m) -#define MUTEX_UNLOCK(m) LeaveCriticalSection(m) -#define MUTEX_DESTROY(m) DeleteCriticalSection(m) - -#else - -typedef HANDLE perl_mutex; -# define MUTEX_INIT(m) \ - STMT_START { \ - if ((*(m) = CreateMutex(NULL,FALSE,NULL)) == NULL) \ - Perl_croak_nocontext("panic: MUTEX_INIT"); \ - } STMT_END - -# define MUTEX_LOCK(m) \ - STMT_START { \ - if (WaitForSingleObject(*(m),INFINITE) == WAIT_FAILED) \ - Perl_croak_nocontext("panic: MUTEX_LOCK"); \ - } STMT_END - -# define MUTEX_UNLOCK(m) \ - STMT_START { \ - if (ReleaseMutex(*(m)) == 0) \ - Perl_croak_nocontext("panic: MUTEX_UNLOCK"); \ - } STMT_END - -# define MUTEX_DESTROY(m) \ - STMT_START { \ - if (CloseHandle(*(m)) == 0) \ - Perl_croak_nocontext("panic: MUTEX_DESTROY"); \ - } STMT_END - -#endif - -/* These macros assume that the mutex associated with the condition - * will always be held before COND_{SIGNAL,BROADCAST,WAIT,DESTROY}, - * so there's no separate mutex protecting access to (c)->waiters - */ -#define COND_INIT(c) \ - STMT_START { \ - (c)->waiters = 0; \ - (c)->sem = CreateSemaphoreW(NULL,0,LONG_MAX,NULL); \ - if ((c)->sem == NULL) \ - Perl_croak_nocontext("panic: COND_INIT (%ld)",GetLastError()); \ - } STMT_END - -#define COND_SIGNAL(c) \ - STMT_START { \ - if ((c)->waiters > 0 && \ - ReleaseSemaphore((c)->sem,1,NULL) == 0) \ - Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",GetLastError()); \ - } STMT_END - -#define COND_BROADCAST(c) \ - STMT_START { \ - if ((c)->waiters > 0 && \ - ReleaseSemaphore((c)->sem,(c)->waiters,NULL) == 0) \ - Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\ - } STMT_END - -#define COND_WAIT(c, m) \ - STMT_START { \ - (c)->waiters++; \ - MUTEX_UNLOCK(m); \ - /* Note that there's no race here, since a \ - * COND_BROADCAST() on another thread will have seen the\ - * right number of waiters (i.e. including this one) */ \ - if (WaitForSingleObject((c)->sem,INFINITE)==WAIT_FAILED)\ - Perl_croak_nocontext("panic: COND_WAIT (%ld)",GetLastError()); \ - /* XXX there may be an inconsequential race here */ \ - MUTEX_LOCK(m); \ - (c)->waiters--; \ - } STMT_END - -#define COND_DESTROY(c) \ - STMT_START { \ - (c)->waiters = 0; \ - if (CloseHandle((c)->sem) == 0) \ - Perl_croak_nocontext("panic: COND_DESTROY (%ld)",GetLastError()); \ - } STMT_END - -#define DETACH(t) \ - STMT_START { \ - if (CloseHandle((t)->self) == 0) { \ - MUTEX_UNLOCK(&(t)->mutex); \ - Perl_croak_nocontext("panic: DETACH"); \ - } \ - } STMT_END - - -#define THREAD_CREATE(t, f) Perl_thread_create(t, f) -#define THREAD_POST_CREATE(t) NOOP - -/* XXX Docs mention that the RTL versions of thread creation routines - * should be used, but that advice only seems applicable when the RTL - * is not in a DLL. RTL DLLs in both Borland and VC seem to do all of - * the init/deinit required upon DLL_THREAD_ATTACH/DETACH. So we seem - * to be completely safe using straight Win32 API calls, rather than - * the much braindamaged RTL calls. - * - * _beginthread() in the RTLs call CloseHandle() just after the thread - * function returns, which means: 1) we have a race on our hands - * 2) it is impossible to implement join() semantics. - * - * IOW, do *NOT* turn on USE_RTL_THREAD_API! It is here - * for experimental purposes only. GSAR 98-01-02 - */ -#ifdef USE_RTL_THREAD_API -# include <process.h> -# if defined(__BORLANDC__) - /* Borland RTL doesn't allow a return value from thread function! */ -# define THREAD_RET_TYPE void _USERENTRY -# define THREAD_RET_CAST(p) ((void)(thr->i.retv = (void *)(p))) -# elif defined (_MSC_VER) -# define THREAD_RET_TYPE unsigned __stdcall -# define THREAD_RET_CAST(p) ((unsigned)(p)) -# else - /* CRTDLL.DLL doesn't allow a return value from thread function! */ -# define THREAD_RET_TYPE void __cdecl -# define THREAD_RET_CAST(p) ((void)(thr->i.retv = (void *)(p))) -# endif -#else /* !USE_RTL_THREAD_API */ -# define THREAD_RET_TYPE DWORD WINAPI -# define THREAD_RET_CAST(p) ((DWORD)(p)) -#endif /* !USE_RTL_THREAD_API */ - -typedef THREAD_RET_TYPE thread_func_t(void *); - - -START_EXTERN_C - -#if defined(PERLDLL) && defined(USE_DECLSPEC_THREAD) && (!defined(__BORLANDC__) || defined(_DLL)) -extern __declspec(thread) void *PL_current_context; -#define PERL_SET_CONTEXT(t) (PL_current_context = t) -#define PERL_GET_CONTEXT PL_current_context -#else -#define PERL_GET_CONTEXT Perl_get_context() -#define PERL_SET_CONTEXT(t) Perl_set_context(t) -#endif - -END_EXTERN_C - -#define INIT_THREADS NOOP -#define ALLOC_THREAD_KEY \ - STMT_START { \ - if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) { \ - PerlIO_printf(PerlIO_stderr(),"panic: TlsAlloc"); \ - exit(1); \ - } \ - } STMT_END - -#define FREE_THREAD_KEY \ - STMT_START { \ - TlsFree(PL_thr_key); \ - } STMT_END - -#define PTHREAD_ATFORK(prepare,parent,child) NOOP - -#if defined(USE_RTL_THREAD_API) && !defined(_MSC_VER) -#define JOIN(t, avp) \ - STMT_START { \ - if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \ - || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \ - || (CloseHandle((t)->self) == 0)) \ - Perl_croak_nocontext("panic: JOIN"); \ - *avp = (AV *)((t)->i.retv); \ - } STMT_END -#else /* !USE_RTL_THREAD_API || _MSC_VER */ -#define JOIN(t, avp) \ - STMT_START { \ - if ((WaitForSingleObject((t)->self,INFINITE) == WAIT_FAILED) \ - || (GetExitCodeThread((t)->self,(LPDWORD)(avp)) == 0) \ - || (CloseHandle((t)->self) == 0)) \ - Perl_croak_nocontext("panic: JOIN"); \ - } STMT_END -#endif /* !USE_RTL_THREAD_API || _MSC_VER */ - -#define YIELD Sleep(0) - -#endif /* _WIN32THREAD_H */ - diff --git a/wince/wince.c b/wince/wince.c deleted file mode 100644 index 02b278184c..0000000000 --- a/wince/wince.c +++ /dev/null @@ -1,3017 +0,0 @@ -/* WINCE.C - stuff for Windows CE - * - * Time-stamp: <26/10/01 15:25:20 keuchel@keuchelnt> - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - */ - -#define WIN32_LEAN_AND_MEAN -#define WIN32IO_IS_STDIO -#include <windows.h> -#include <signal.h> - -#define PERLIO_NOT_STDIO 0 - -#if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO) -#define PerlIO FILE -#endif - -#define wince_private -#include "errno.h" - -#include "EXTERN.h" -#include "perl.h" - -#define NO_XSLOCKS -#define PERL_NO_GET_CONTEXT -#include "XSUB.h" - -#include "win32iop.h" -#include <string.h> -#include <stdarg.h> -#include <float.h> -#include <shellapi.h> -#include <process.h> - -#define perl -#include "celib_defs.h" -#include "cewin32.h" -#include "cecrt.h" -#include "cewin32_defs.h" -#include "cecrt_defs.h" - -#define GetCurrentDirectoryW XCEGetCurrentDirectoryW - -#ifdef PALM_SIZE -#include "stdio-palmsize.h" -#endif - -#define EXECF_EXEC 1 -#define EXECF_SPAWN 2 -#define EXECF_SPAWN_NOWAIT 3 - -#if defined(PERL_IMPLICIT_SYS) -# undef win32_get_privlib -# define win32_get_privlib g_win32_get_privlib -# undef win32_get_sitelib -# define win32_get_sitelib g_win32_get_sitelib -# undef win32_get_vendorlib -# define win32_get_vendorlib g_win32_get_vendorlib -# undef do_spawn -# define do_spawn g_do_spawn -# undef getlogin -# define getlogin g_getlogin -#endif - -static void get_shell(void); -static long tokenize(const char *str, char **dest, char ***destv); -static int do_spawn2(pTHX_ char *cmd, int exectype); -static BOOL has_shell_metachars(char *ptr); -static long filetime_to_clock(PFILETIME ft); -static BOOL filetime_from_time(PFILETIME ft, time_t t); -static char * get_emd_part(SV **leading, char *trailing, ...); -static void remove_dead_process(long deceased); -static long find_pid(int pid); -static char * qualified_path(const char *cmd); -static char * win32_get_xlib(const char *pl, const char *xlib, - const char *libname); - -#ifdef USE_ITHREADS -static void remove_dead_pseudo_process(long child); -static long find_pseudo_pid(int pid); -#endif - -int _fmode = O_TEXT; /* celib do not provide _fmode, so we define it here */ - -START_EXTERN_C -HANDLE w32_perldll_handle = INVALID_HANDLE_VALUE; -char w32_module_name[MAX_PATH+1]; -END_EXTERN_C - -static DWORD w32_platform = (DWORD)-1; - -int -IsWin95(void) -{ - return (win32_os_id() == VER_PLATFORM_WIN32_WINDOWS); -} - -int -IsWinNT(void) -{ - return (win32_os_id() == VER_PLATFORM_WIN32_NT); -} - -int -IsWinCE(void) -{ - return (win32_os_id() == VER_PLATFORM_WIN32_CE); -} - -EXTERN_C void -set_w32_module_name(void) -{ - char* ptr; - XCEGetModuleFileNameA((HMODULE)((w32_perldll_handle == INVALID_HANDLE_VALUE) - ? XCEGetModuleHandleA(NULL) - : w32_perldll_handle), - w32_module_name, sizeof(w32_module_name)); - - /* normalize to forward slashes */ - ptr = w32_module_name; - while (*ptr) { - if (*ptr == '\\') - *ptr = '/'; - ++ptr; - } -} - -/* *svp (if non-NULL) is expected to be POK (valid allocated SvPVX(*svp)) */ -static char* -get_regstr_from(HKEY hkey, const char *valuename, SV **svp) -{ - /* Retrieve a REG_SZ or REG_EXPAND_SZ from the registry */ - HKEY handle; - DWORD type; - const char *subkey = "Software\\Perl"; - char *str = Nullch; - long retval; - - retval = XCERegOpenKeyExA(hkey, subkey, 0, KEY_READ, &handle); - if (retval == ERROR_SUCCESS) { - DWORD datalen; - retval = XCERegQueryValueExA(handle, valuename, 0, &type, NULL, &datalen); - if (retval == ERROR_SUCCESS && type == REG_SZ) { - dTHX; - if (!*svp) - *svp = sv_2mortal(newSVpvn("",0)); - SvGROW(*svp, datalen); - retval = XCERegQueryValueExA(handle, valuename, 0, NULL, - (PBYTE)SvPVX(*svp), &datalen); - if (retval == ERROR_SUCCESS) { - str = SvPVX(*svp); - SvCUR_set(*svp,datalen-1); - } - } - RegCloseKey(handle); - } - return str; -} - -/* *svp (if non-NULL) is expected to be POK (valid allocated SvPVX(*svp)) */ -static char* -get_regstr(const char *valuename, SV **svp) -{ - char *str = get_regstr_from(HKEY_CURRENT_USER, valuename, svp); - if (!str) - str = get_regstr_from(HKEY_LOCAL_MACHINE, valuename, svp); - return str; -} - -/* *prev_pathp (if non-NULL) is expected to be POK (valid allocated SvPVX(sv)) */ -static char * -get_emd_part(SV **prev_pathp, char *trailing_path, ...) -{ - char base[10]; - va_list ap; - char mod_name[MAX_PATH+1]; - char *ptr; - char *optr; - char *strip; - int oldsize, newsize; - STRLEN baselen; - - va_start(ap, trailing_path); - strip = va_arg(ap, char *); - - sprintf(base, "%d.%d", (int)PERL_REVISION, (int)PERL_VERSION); - baselen = strlen(base); - - if (!*w32_module_name) { - set_w32_module_name(); - } - strcpy(mod_name, w32_module_name); - ptr = strrchr(mod_name, '/'); - while (ptr && strip) { - /* look for directories to skip back */ - optr = ptr; - *ptr = '\0'; - ptr = strrchr(mod_name, '/'); - /* avoid stripping component if there is no slash, - * or it doesn't match ... */ - if (!ptr || stricmp(ptr+1, strip) != 0) { - /* ... but not if component matches m|5\.$patchlevel.*| */ - if (!ptr || !(*strip == '5' && *(ptr+1) == '5' - && strncmp(strip, base, baselen) == 0 - && strncmp(ptr+1, base, baselen) == 0)) - { - *optr = '/'; - ptr = optr; - } - } - strip = va_arg(ap, char *); - } - if (!ptr) { - ptr = mod_name; - *ptr++ = '.'; - *ptr = '/'; - } - va_end(ap); - strcpy(++ptr, trailing_path); - - /* only add directory if it exists */ - if (XCEGetFileAttributesA(mod_name) != (DWORD) -1) { - /* directory exists */ - dTHX; - if (!*prev_pathp) - *prev_pathp = sv_2mortal(newSVpvn("",0)); - sv_catpvn(*prev_pathp, ";", 1); - sv_catpv(*prev_pathp, mod_name); - return SvPVX(*prev_pathp); - } - - return Nullch; -} - -char * -win32_get_privlib(const char *pl) -{ - dTHX; - char *stdlib = "lib"; - char buffer[MAX_PATH+1]; - SV *sv = Nullsv; - - /* $stdlib = $HKCU{"lib-$]"} || $HKLM{"lib-$]"} || $HKCU{"lib"} || $HKLM{"lib"} || ""; */ - sprintf(buffer, "%s-%s", stdlib, pl); - if (!get_regstr(buffer, &sv)) - (void)get_regstr(stdlib, &sv); - - /* $stdlib .= ";$EMD/../../lib" */ - return get_emd_part(&sv, stdlib, ARCHNAME, "bin", Nullch); -} - -static char * -win32_get_xlib(const char *pl, const char *xlib, const char *libname) -{ - dTHX; - char regstr[40]; - char pathstr[MAX_PATH+1]; - DWORD datalen; - int len, newsize; - SV *sv1 = Nullsv; - SV *sv2 = Nullsv; - - /* $HKCU{"$xlib-$]"} || $HKLM{"$xlib-$]"} . ---; */ - sprintf(regstr, "%s-%s", xlib, pl); - (void)get_regstr(regstr, &sv1); - - /* $xlib .= - * ";$EMD/" . ((-d $EMD/../../../$]) ? "../../.." : "../.."). "/$libname/$]/lib"; */ - sprintf(pathstr, "%s/%s/lib", libname, pl); - (void)get_emd_part(&sv1, pathstr, ARCHNAME, "bin", pl, Nullch); - - /* $HKCU{$xlib} || $HKLM{$xlib} . ---; */ - (void)get_regstr(xlib, &sv2); - - /* $xlib .= - * ";$EMD/" . ((-d $EMD/../../../$]) ? "../../.." : "../.."). "/$libname/lib"; */ - sprintf(pathstr, "%s/lib", libname); - (void)get_emd_part(&sv2, pathstr, ARCHNAME, "bin", pl, Nullch); - - if (!sv1 && !sv2) - return Nullch; - if (!sv1) - return SvPVX(sv2); - if (!sv2) - return SvPVX(sv1); - - sv_catpvn(sv1, ";", 1); - sv_catsv(sv1, sv2); - - return SvPVX(sv1); -} - -char * -win32_get_sitelib(const char *pl) -{ - return win32_get_xlib(pl, "sitelib", "site"); -} - -#ifndef PERL_VENDORLIB_NAME -# define PERL_VENDORLIB_NAME "vendor" -#endif - -char * -win32_get_vendorlib(const char *pl) -{ - return win32_get_xlib(pl, "vendorlib", PERL_VENDORLIB_NAME); -} - -static BOOL -has_shell_metachars(char *ptr) -{ - int inquote = 0; - char quote = '\0'; - - /* - * Scan string looking for redirection (< or >) or pipe - * characters (|) that are not in a quoted string. - * Shell variable interpolation (%VAR%) can also happen inside strings. - */ - while (*ptr) { - switch(*ptr) { - case '%': - return TRUE; - case '\'': - case '\"': - if (inquote) { - if (quote == *ptr) { - inquote = 0; - quote = '\0'; - } - } - else { - quote = *ptr; - inquote++; - } - break; - case '>': - case '<': - case '|': - if (!inquote) - return TRUE; - default: - break; - } - ++ptr; - } - return FALSE; -} - -#if !defined(PERL_IMPLICIT_SYS) -/* since the current process environment is being updated in util.c - * the library functions will get the correct environment - */ -PerlIO * -Perl_my_popen(pTHX_ const char *cmd, const char *mode) -{ - printf("popen(%s)\n", cmd); - - Perl_croak(aTHX_ PL_no_func, "popen"); - return NULL; -} - -long -Perl_my_pclose(pTHX_ PerlIO *fp) -{ - Perl_croak(aTHX_ PL_no_func, "pclose"); - return -1; -} -#endif - -DllExport unsigned long -win32_os_id(void) -{ - static OSVERSIONINFOA osver; - - if (osver.dwPlatformId != w32_platform) { - memset(&osver, 0, sizeof(OSVERSIONINFOA)); - osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - XCEGetVersionExA(&osver); - w32_platform = osver.dwPlatformId; - } - return (unsigned long)w32_platform; -} - -DllExport int -win32_getpid(void) -{ - int pid; -#ifdef USE_ITHREADS - dTHX; - if (w32_pseudo_id) - return -((int)w32_pseudo_id); -#endif - pid = xcegetpid(); - return pid; -} - -/* Tokenize a string. Words are null-separated, and the list - * ends with a doubled null. Any character (except null and - * including backslash) may be escaped by preceding it with a - * backslash (the backslash will be stripped). - * Returns number of words in result buffer. - */ -static long -tokenize(const char *str, char **dest, char ***destv) -{ - char *retstart = Nullch; - char **retvstart = 0; - int items = -1; - if (str) { - dTHX; - int slen = strlen(str); - register char *ret; - register char **retv; - Newx(ret, slen+2, char); - Newx(retv, (slen+3)/2, char*); - - retstart = ret; - retvstart = retv; - *retv = ret; - items = 0; - while (*str) { - *ret = *str++; - if (*ret == '\\' && *str) - *ret = *str++; - else if (*ret == ' ') { - while (*str == ' ') - str++; - if (ret == retstart) - ret--; - else { - *ret = '\0'; - ++items; - if (*str) - *++retv = ret+1; - } - } - else if (!*str) - ++items; - ret++; - } - retvstart[items] = Nullch; - *ret++ = '\0'; - *ret = '\0'; - } - *dest = retstart; - *destv = retvstart; - return items; -} - -DllExport int -win32_pipe(int *pfd, unsigned int size, int mode) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "pipe"); - return -1; -} - -DllExport int -win32_times(struct tms *timebuf) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "times"); - return -1; -} - -Sighandler_t -win32_signal(int sig, Sighandler_t subcode) -{ - return xcesignal(sig, subcode); -} - -static void -get_shell(void) -{ - dTHX; - if (!w32_perlshell_tokens) { - /* we don't use COMSPEC here for two reasons: - * 1. the same reason perl on UNIX doesn't use SHELL--rampant and - * uncontrolled unportability of the ensuing scripts. - * 2. PERL5SHELL could be set to a shell that may not be fit for - * interactive use (which is what most programs look in COMSPEC - * for). - */ - const char* defaultshell = (IsWinNT() - ? "cmd.exe /x/d/c" : "command.com /c"); - const char *usershell = PerlEnv_getenv("PERL5SHELL"); - w32_perlshell_items = tokenize(usershell ? usershell : defaultshell, - &w32_perlshell_tokens, - &w32_perlshell_vec); - } -} - -int -Perl_do_aspawn(pTHX_ SV *really, SV **mark, SV **sp) -{ - Perl_croak(aTHX_ PL_no_func, "aspawn"); - return -1; -} - -/* returns pointer to the next unquoted space or the end of the string */ -static char* -find_next_space(const char *s) -{ - bool in_quotes = FALSE; - while (*s) { - /* ignore doubled backslashes, or backslash+quote */ - if (*s == '\\' && (s[1] == '\\' || s[1] == '"')) { - s += 2; - } - /* keep track of when we're within quotes */ - else if (*s == '"') { - s++; - in_quotes = !in_quotes; - } - /* break it up only at spaces that aren't in quotes */ - else if (!in_quotes && isSPACE(*s)) - return (char*)s; - else - s++; - } - return (char*)s; -} - -#if 1 -static int -do_spawn2(pTHX_ char *cmd, int exectype) -{ - char **a; - char *s; - char **argv; - int status = -1; - BOOL needToTry = TRUE; - char *cmd2; - - /* Save an extra exec if possible. See if there are shell - * metacharacters in it */ - if (!has_shell_metachars(cmd)) { - Newx(argv, strlen(cmd) / 2 + 2, char*); - Newx(cmd2, strlen(cmd) + 1, char); - strcpy(cmd2, cmd); - a = argv; - for (s = cmd2; *s;) { - while (*s && isSPACE(*s)) - s++; - if (*s) - *(a++) = s; - s = find_next_space(s); - if (*s) - *s++ = '\0'; - } - *a = Nullch; - if (argv[0]) { - switch (exectype) { - case EXECF_SPAWN: - status = win32_spawnvp(P_WAIT, argv[0], - (const char* const*)argv); - break; - case EXECF_SPAWN_NOWAIT: - status = win32_spawnvp(P_NOWAIT, argv[0], - (const char* const*)argv); - break; - case EXECF_EXEC: - status = win32_execvp(argv[0], (const char* const*)argv); - break; - } - if (status != -1 || errno == 0) - needToTry = FALSE; - } - Safefree(argv); - Safefree(cmd2); - } - if (needToTry) { - char **argv; - int i = -1; - get_shell(); - Newx(argv, w32_perlshell_items + 2, char*); - while (++i < w32_perlshell_items) - argv[i] = w32_perlshell_vec[i]; - argv[i++] = cmd; - argv[i] = Nullch; - switch (exectype) { - case EXECF_SPAWN: - status = win32_spawnvp(P_WAIT, argv[0], - (const char* const*)argv); - break; - case EXECF_SPAWN_NOWAIT: - status = win32_spawnvp(P_NOWAIT, argv[0], - (const char* const*)argv); - break; - case EXECF_EXEC: - status = win32_execvp(argv[0], (const char* const*)argv); - break; - } - cmd = argv[0]; - Safefree(argv); - } - if (exectype == EXECF_SPAWN_NOWAIT) { - if (IsWin95()) - PL_statusvalue = -1; /* >16bits hint for pp_system() */ - } - else { - if (status < 0) { - if (ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s \"%s\": %s", - (exectype == EXECF_EXEC ? "exec" : "spawn"), - cmd, strerror(errno)); - status = 255 * 256; - } - else - status *= 256; - PL_statusvalue = status; - } - return (status); -} - -int -Perl_do_spawn(pTHX_ char *cmd) -{ - return do_spawn2(aTHX_ cmd, EXECF_SPAWN); -} - -int -Perl_do_spawn_nowait(pTHX_ char *cmd) -{ - return do_spawn2(aTHX_ cmd, EXECF_SPAWN_NOWAIT); -} - -bool -Perl_do_exec(pTHX_ const char *cmd) -{ - do_spawn2(aTHX_ cmd, EXECF_EXEC); - return FALSE; -} - -/* The idea here is to read all the directory names into a string table - * (separated by nulls) and when one of the other dir functions is called - * return the pointer to the current file name. - */ -DllExport DIR * -win32_opendir(const char *filename) -{ - dTHX; - DIR *dirp; - long len; - long idx; - char scanname[MAX_PATH+3]; - Stat_t sbuf; - WIN32_FIND_DATAA aFindData; - WIN32_FIND_DATAW wFindData; - HANDLE fh; - char buffer[MAX_PATH*2]; - WCHAR wbuffer[MAX_PATH+1]; - char* ptr; - - len = strlen(filename); - if (len > MAX_PATH) - return NULL; - - /* check to see if filename is a directory */ - if (win32_stat(filename, &sbuf) < 0 || !S_ISDIR(sbuf.st_mode)) - return NULL; - - /* Get us a DIR structure */ - Newxz(dirp, 1, DIR); - - /* Create the search pattern */ - strcpy(scanname, filename); - - /* bare drive name means look in cwd for drive */ - if (len == 2 && isALPHA(scanname[0]) && scanname[1] == ':') { - scanname[len++] = '.'; - scanname[len++] = '/'; - } - else if (scanname[len-1] != '/' && scanname[len-1] != '\\') { - scanname[len++] = '/'; - } - scanname[len++] = '*'; - scanname[len] = '\0'; - - /* do the FindFirstFile call */ - fh = FindFirstFile(PerlDir_mapA(scanname), &aFindData); - dirp->handle = fh; - if (fh == INVALID_HANDLE_VALUE) { - DWORD err = GetLastError(); - /* FindFirstFile() fails on empty drives! */ - switch (err) { - case ERROR_FILE_NOT_FOUND: - return dirp; - case ERROR_NO_MORE_FILES: - case ERROR_PATH_NOT_FOUND: - errno = ENOENT; - break; - case ERROR_NOT_ENOUGH_MEMORY: - errno = ENOMEM; - break; - default: - errno = EINVAL; - break; - } - Safefree(dirp); - return NULL; - } - - /* now allocate the first part of the string table for - * the filenames that we find. - */ - ptr = aFindData.cFileName; - idx = strlen(ptr)+1; - if (idx < 256) - dirp->size = 128; - else - dirp->size = idx; - Newx(dirp->start, dirp->size, char); - strcpy(dirp->start, ptr); - dirp->nfiles++; - dirp->end = dirp->curr = dirp->start; - dirp->end += idx; - return dirp; -} - - -/* Readdir just returns the current string pointer and bumps the - * string pointer to the nDllExport entry. - */ -DllExport struct direct * -win32_readdir(DIR *dirp) -{ - long len; - - if (dirp->curr) { - /* first set up the structure to return */ - len = strlen(dirp->curr); - strcpy(dirp->dirstr.d_name, dirp->curr); - dirp->dirstr.d_namlen = len; - - /* Fake an inode */ - dirp->dirstr.d_ino = dirp->curr - dirp->start; - - /* Now set up for the next call to readdir */ - dirp->curr += len + 1; - if (dirp->curr >= dirp->end) { - dTHX; - char* ptr; - BOOL res; - WIN32_FIND_DATAW wFindData; - WIN32_FIND_DATAA aFindData; - char buffer[MAX_PATH*2]; - - /* finding the next file that matches the wildcard - * (which should be all of them in this directory!). - */ - res = FindNextFile(dirp->handle, &aFindData); - if (res) - ptr = aFindData.cFileName; - if (res) { - long endpos = dirp->end - dirp->start; - long newsize = endpos + strlen(ptr) + 1; - /* bump the string table size by enough for the - * new name and its null terminator */ - while (newsize > dirp->size) { - long curpos = dirp->curr - dirp->start; - dirp->size *= 2; - Renew(dirp->start, dirp->size, char); - dirp->curr = dirp->start + curpos; - } - strcpy(dirp->start + endpos, ptr); - dirp->end = dirp->start + newsize; - dirp->nfiles++; - } - else - dirp->curr = NULL; - } - return &(dirp->dirstr); - } - else - return NULL; -} - -/* Telldir returns the current string pointer position */ -DllExport long -win32_telldir(DIR *dirp) -{ - return (dirp->curr - dirp->start); -} - - -/* Seekdir moves the string pointer to a previously saved position - * (returned by telldir). - */ -DllExport void -win32_seekdir(DIR *dirp, long loc) -{ - dirp->curr = dirp->start + loc; -} - -/* Rewinddir resets the string pointer to the start */ -DllExport void -win32_rewinddir(DIR *dirp) -{ - dirp->curr = dirp->start; -} - -/* free the memory allocated by opendir */ -DllExport int -win32_closedir(DIR *dirp) -{ - dTHX; - if (dirp->handle != INVALID_HANDLE_VALUE) - FindClose(dirp->handle); - Safefree(dirp->start); - Safefree(dirp); - return 1; -} - -#else -/////!!!!!!!!!!! return here and do right stuff!!!! - -DllExport DIR * -win32_opendir(const char *filename) -{ - return opendir(filename); -} - -DllExport struct direct * -win32_readdir(DIR *dirp) -{ - return readdir(dirp); -} - -DllExport long -win32_telldir(DIR *dirp) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "telldir"); - return -1; -} - -DllExport void -win32_seekdir(DIR *dirp, long loc) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "seekdir"); -} - -DllExport void -win32_rewinddir(DIR *dirp) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "rewinddir"); -} - -DllExport int -win32_closedir(DIR *dirp) -{ - closedir(dirp); - return 0; -} -#endif // 1 - -DllExport int -win32_kill(int pid, int sig) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "kill"); - return -1; -} - -DllExport int -win32_stat(const char *path, struct stat *sbuf) -{ - return xcestat(path, sbuf); -} - -DllExport char * -win32_longpath(char *path) -{ - return path; -} - -#ifndef USE_WIN32_RTL_ENV - -DllExport char * -win32_getenv(const char *name) -{ - return xcegetenv(name); -} - -DllExport int -win32_putenv(const char *name) -{ - return xceputenv(name); -} - -#endif - -static long -filetime_to_clock(PFILETIME ft) -{ - __int64 qw = ft->dwHighDateTime; - qw <<= 32; - qw |= ft->dwLowDateTime; - qw /= 10000; /* File time ticks at 0.1uS, clock at 1mS */ - return (long) qw; -} - -/* fix utime() so it works on directories in NT */ -static BOOL -filetime_from_time(PFILETIME pFileTime, time_t Time) -{ - struct tm *pTM = localtime(&Time); - SYSTEMTIME SystemTime; - FILETIME LocalTime; - - if (pTM == NULL) - return FALSE; - - SystemTime.wYear = pTM->tm_year + 1900; - SystemTime.wMonth = pTM->tm_mon + 1; - SystemTime.wDay = pTM->tm_mday; - SystemTime.wHour = pTM->tm_hour; - SystemTime.wMinute = pTM->tm_min; - SystemTime.wSecond = pTM->tm_sec; - SystemTime.wMilliseconds = 0; - - return SystemTimeToFileTime(&SystemTime, &LocalTime) && - LocalFileTimeToFileTime(&LocalTime, pFileTime); -} - -DllExport int -win32_unlink(const char *filename) -{ - return xceunlink(filename); -} - -DllExport int -win32_utime(const char *filename, struct utimbuf *times) -{ - return xceutime(filename, (struct _utimbuf *) times); -} - -DllExport int -win32_gettimeofday(struct timeval *tp, void *not_used) -{ - return xcegettimeofday(tp,not_used); -} - -DllExport int -win32_uname(struct utsname *name) -{ - struct hostent *hep; - STRLEN nodemax = sizeof(name->nodename)-1; - OSVERSIONINFOA osver; - - memset(&osver, 0, sizeof(OSVERSIONINFOA)); - osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - if (XCEGetVersionExA(&osver)) { - /* sysname */ - switch (osver.dwPlatformId) { - case VER_PLATFORM_WIN32_CE: - strcpy(name->sysname, "Windows CE"); - break; - case VER_PLATFORM_WIN32_WINDOWS: - strcpy(name->sysname, "Windows"); - break; - case VER_PLATFORM_WIN32_NT: - strcpy(name->sysname, "Windows NT"); - break; - case VER_PLATFORM_WIN32s: - strcpy(name->sysname, "Win32s"); - break; - default: - strcpy(name->sysname, "Win32 Unknown"); - break; - } - - /* release */ - sprintf(name->release, "%d.%d", - osver.dwMajorVersion, osver.dwMinorVersion); - - /* version */ - sprintf(name->version, "Build %d", - osver.dwPlatformId == VER_PLATFORM_WIN32_NT - ? osver.dwBuildNumber : (osver.dwBuildNumber & 0xffff)); - if (osver.szCSDVersion[0]) { - char *buf = name->version + strlen(name->version); - sprintf(buf, " (%s)", osver.szCSDVersion); - } - } - else { - *name->sysname = '\0'; - *name->version = '\0'; - *name->release = '\0'; - } - - /* nodename */ - hep = win32_gethostbyname("localhost"); - if (hep) { - STRLEN len = strlen(hep->h_name); - if (len <= nodemax) { - strcpy(name->nodename, hep->h_name); - } - else { - strncpy(name->nodename, hep->h_name, nodemax); - name->nodename[nodemax] = '\0'; - } - } - else { - DWORD sz = nodemax; - if (!XCEGetComputerNameA(name->nodename, &sz)) - *name->nodename = '\0'; - } - - /* machine (architecture) */ - { - SYSTEM_INFO info; - char *arch; - GetSystemInfo(&info); - - switch (info.wProcessorArchitecture) { - case PROCESSOR_ARCHITECTURE_INTEL: - arch = "x86"; break; - case PROCESSOR_ARCHITECTURE_MIPS: - arch = "mips"; break; - case PROCESSOR_ARCHITECTURE_ALPHA: - arch = "alpha"; break; - case PROCESSOR_ARCHITECTURE_PPC: - arch = "ppc"; break; - case PROCESSOR_ARCHITECTURE_ARM: - arch = "arm"; break; - case PROCESSOR_HITACHI_SH3: - arch = "sh3"; break; - case PROCESSOR_SHx_SH3: - arch = "sh3"; break; - - default: - arch = "unknown"; break; - } - strcpy(name->machine, arch); - } - return 0; -} - -/* Timing related stuff */ - -int -do_raise(pTHX_ int sig) -{ - if (sig < SIG_SIZE) { - Sighandler_t handler = w32_sighandler[sig]; - if (handler == SIG_IGN) { - return 0; - } - else if (handler != SIG_DFL) { - (*handler)(sig); - return 0; - } - else { - /* Choose correct default behaviour */ - switch (sig) { -#ifdef SIGCLD - case SIGCLD: -#endif -#ifdef SIGCHLD - case SIGCHLD: -#endif - case 0: - return 0; - case SIGTERM: - default: - break; - } - } - } - /* Tell caller to exit thread/process as approriate */ - return 1; -} - -void -sig_terminate(pTHX_ int sig) -{ - Perl_warn(aTHX_ "Terminating on signal SIG%s(%d)\n",PL_sig_name[sig], sig); - /* exit() seems to be safe, my_exit() or die() is a problem in ^C - thread - */ - exit(sig); -} - -DllExport int -win32_async_check(pTHX) -{ - MSG msg; - int ours = 1; - /* Passing PeekMessage -1 as HWND (2nd arg) only get PostThreadMessage() messages - * and ignores window messages - should co-exist better with windows apps e.g. Tk - */ - while (PeekMessage(&msg, (HWND)-1, 0, 0, PM_REMOVE|PM_NOYIELD)) { - int sig; - switch(msg.message) { - -#if 0 - /* Perhaps some other messages could map to signals ? ... */ - case WM_CLOSE: - case WM_QUIT: - /* Treat WM_QUIT like SIGHUP? */ - sig = SIGHUP; - goto Raise; - break; -#endif - - /* We use WM_USER to fake kill() with other signals */ - case WM_USER: { - sig = msg.wParam; - Raise: - if (do_raise(aTHX_ sig)) { - sig_terminate(aTHX_ sig); - } - break; - } - - case WM_TIMER: { - /* alarm() is a one-shot but SetTimer() repeats so kill it */ - if (w32_timerid) { - KillTimer(NULL,w32_timerid); - w32_timerid=0; - } - /* Now fake a call to signal handler */ - if (do_raise(aTHX_ 14)) { - sig_terminate(aTHX_ 14); - } - break; - } - - /* Otherwise do normal Win32 thing - in case it is useful */ - default: - TranslateMessage(&msg); - DispatchMessage(&msg); - ours = 0; - break; - } - } - w32_poll_count = 0; - - /* Above or other stuff may have set a signal flag */ - if (PL_sig_pending) { - despatch_signals(); - } - return ours; -} - -/* This function will not return until the timeout has elapsed, or until - * one of the handles is ready. */ -DllExport DWORD -win32_msgwait(pTHX_ DWORD count, LPHANDLE handles, DWORD timeout, LPDWORD resultp) -{ - /* We may need several goes at this - so compute when we stop */ - DWORD ticks = 0; - if (timeout != INFINITE) { - ticks = GetTickCount(); - timeout += ticks; - } - while (1) { - DWORD result = MsgWaitForMultipleObjects(count,handles,FALSE,timeout-ticks, QS_ALLEVENTS); - if (resultp) - *resultp = result; - if (result == WAIT_TIMEOUT) { - /* Ran out of time - explicit return of zero to avoid -ve if we - have scheduling issues - */ - return 0; - } - if (timeout != INFINITE) { - ticks = GetTickCount(); - } - if (result == WAIT_OBJECT_0 + count) { - /* Message has arrived - check it */ - (void)win32_async_check(aTHX); - } - else { - /* Not timeout or message - one of handles is ready */ - break; - } - } - /* compute time left to wait */ - ticks = timeout - ticks; - /* If we are past the end say zero */ - return (ticks > 0) ? ticks : 0; -} - -static UINT timerid = 0; - -static VOID CALLBACK TimerProc(HWND win, UINT msg, UINT id, DWORD time) -{ - dTHX; - KillTimer(NULL,timerid); - timerid=0; - sighandler(14); -} - -DllExport unsigned int -win32_sleep(unsigned int t) -{ - return xcesleep(t); -} - -DllExport unsigned int -win32_alarm(unsigned int sec) -{ - /* - * the 'obvious' implentation is SetTimer() with a callback - * which does whatever receiving SIGALRM would do - * we cannot use SIGALRM even via raise() as it is not - * one of the supported codes in <signal.h> - * - * Snag is unless something is looking at the message queue - * nothing happens :-( - */ - dTHX; - if (sec) - { - timerid = SetTimer(NULL,timerid,sec*1000,(TIMERPROC)TimerProc); - if (!timerid) - Perl_croak_nocontext("Cannot set timer"); - } - else - { - if (timerid) - { - KillTimer(NULL,timerid); - timerid=0; - } - } - return 0; -} - -#ifdef HAVE_DES_FCRYPT -extern char * des_fcrypt(const char *txt, const char *salt, char *cbuf); -#endif - -DllExport char * -win32_crypt(const char *txt, const char *salt) -{ - dTHX; -#ifdef HAVE_DES_FCRYPT - dTHR; - return des_fcrypt(txt, salt, w32_crypt_buffer); -#else - Perl_croak(aTHX_ "The crypt() function is unimplemented due to excessive paranoia."); - return Nullch; -#endif -} - - -/* - * redirected io subsystem for all XS modules - * - */ - -DllExport int * -win32_errno(void) -{ - return (&errno); -} - -DllExport char *** -win32_environ(void) -{ - return (&(environ)); -} - -/* the rest are the remapped stdio routines */ -DllExport FILE * -win32_stderr(void) -{ - return (stderr); -} - -char *g_getlogin() { - return "no-getlogin"; -} - -DllExport FILE * -win32_stdin(void) -{ - return (stdin); -} - -DllExport FILE * -win32_stdout() -{ - return (stdout); -} - -DllExport int -win32_ferror(FILE *fp) -{ - return (ferror(fp)); -} - - -DllExport int -win32_feof(FILE *fp) -{ - return (feof(fp)); -} - -/* - * Since the errors returned by the socket error function - * WSAGetLastError() are not known by the library routine strerror - * we have to roll our own. - */ - -DllExport char * -win32_strerror(int e) -{ - return xcestrerror(e); -} - -DllExport void -win32_str_os_error(void *sv, DWORD dwErr) -{ - dTHX; - - sv_setpvn((SV*)sv, "Error", 5); -} - - -DllExport int -win32_fprintf(FILE *fp, const char *format, ...) -{ - va_list marker; - va_start(marker, format); /* Initialize variable arguments. */ - - return (vfprintf(fp, format, marker)); -} - -DllExport int -win32_printf(const char *format, ...) -{ - va_list marker; - va_start(marker, format); /* Initialize variable arguments. */ - - return (vprintf(format, marker)); -} - -DllExport int -win32_vfprintf(FILE *fp, const char *format, va_list args) -{ - return (vfprintf(fp, format, args)); -} - -DllExport int -win32_vprintf(const char *format, va_list args) -{ - return (vprintf(format, args)); -} - -DllExport size_t -win32_fread(void *buf, size_t size, size_t count, FILE *fp) -{ - return fread(buf, size, count, fp); -} - -DllExport size_t -win32_fwrite(const void *buf, size_t size, size_t count, FILE *fp) -{ - return fwrite(buf, size, count, fp); -} - -DllExport FILE * -win32_fopen(const char *filename, const char *mode) -{ - return xcefopen(filename, mode); -} - -DllExport FILE * -win32_fdopen(int handle, const char *mode) -{ - return palm_fdopen(handle, mode); -} - -DllExport FILE * -win32_freopen(const char *path, const char *mode, FILE *stream) -{ - return xcefreopen(path, mode, stream); -} - -DllExport int -win32_fclose(FILE *pf) -{ - return xcefclose(pf); -} - -DllExport int -win32_fputs(const char *s,FILE *pf) -{ - return fputs(s, pf); -} - -DllExport int -win32_fputc(int c,FILE *pf) -{ - return fputc(c,pf); -} - -DllExport int -win32_ungetc(int c,FILE *pf) -{ - return ungetc(c,pf); -} - -DllExport int -win32_getc(FILE *pf) -{ - return getc(pf); -} - -DllExport int -win32_fileno(FILE *pf) -{ - return palm_fileno(pf); -} - -DllExport void -win32_clearerr(FILE *pf) -{ - clearerr(pf); - return; -} - -DllExport int -win32_fflush(FILE *pf) -{ - return fflush(pf); -} - -DllExport long -win32_ftell(FILE *pf) -{ - return ftell(pf); -} - -DllExport int -win32_fseek(FILE *pf, Off_t offset,int origin) -{ - return fseek(pf, offset, origin); -} - -/* fpos_t seems to be int64 on hpc pro! Really stupid. */ -/* But maybe someday there will be such large disks in a hpc... */ -DllExport int -win32_fgetpos(FILE *pf, fpos_t *p) -{ - return fgetpos(pf, p); -} - -DllExport int -win32_fsetpos(FILE *pf, const fpos_t *p) -{ - return fsetpos(pf, p); -} - -DllExport void -win32_rewind(FILE *pf) -{ - fseek(pf, 0, SEEK_SET); - return; -} - -DllExport int -win32_tmpfd(void) -{ - dTHX; - char prefix[MAX_PATH+1]; - char filename[MAX_PATH+1]; - DWORD len = GetTempPath(MAX_PATH, prefix); - if (len && len < MAX_PATH) { - if (GetTempFileName(prefix, "plx", 0, filename)) { - HANDLE fh = CreateFile(filename, - DELETE | GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL - | FILE_FLAG_DELETE_ON_CLOSE, - NULL); - if (fh != INVALID_HANDLE_VALUE) { - int fd = win32_open_osfhandle((intptr_t)fh, 0); - if (fd >= 0) { -#if defined(__BORLANDC__) - setmode(fd,O_BINARY); -#endif - DEBUG_p(PerlIO_printf(Perl_debug_log, - "Created tmpfile=%s\n",filename)); - return fd; - } - } - } - } - return -1; -} - -DllExport FILE* -win32_tmpfile(void) -{ - int fd = win32_tmpfd(); - if (fd >= 0) - return win32_fdopen(fd, "w+b"); - return NULL; -} - -DllExport void -win32_abort(void) -{ - xceabort(); - - return; -} - -DllExport int -win32_fstat(int fd, struct stat *sbufptr) -{ - return xcefstat(fd, sbufptr); -} - -DllExport int -win32_link(const char *oldname, const char *newname) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "link"); - - return -1; -} - -DllExport int -win32_rename(const char *oname, const char *newname) -{ - return xcerename(oname, newname); -} - -DllExport int -win32_setmode(int fd, int mode) -{ - /* currently 'celib' seem to have this function in src, but not - * exported. When it will be, we'll uncomment following line. - */ - /* return xcesetmode(fd, mode); */ - return 0; -} - -DllExport int -win32_chsize(int fd, Off_t size) -{ - return chsize(fd, size); -} - -DllExport long -win32_lseek(int fd, Off_t offset, int origin) -{ - return xcelseek(fd, offset, origin); -} - -DllExport long -win32_tell(int fd) -{ - return xcelseek(fd, 0, SEEK_CUR); -} - -DllExport int -win32_open(const char *path, int flag, ...) -{ - int pmode; - va_list ap; - - va_start(ap, flag); - pmode = va_arg(ap, int); - va_end(ap); - - return xceopen(path, flag, pmode); -} - -DllExport int -win32_close(int fd) -{ - return xceclose(fd); -} - -DllExport int -win32_eof(int fd) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "eof"); - return -1; -} - -DllExport int -win32_dup(int fd) -{ - return xcedup(fd); /* from celib/ceio.c; requires some more work on it */ -} - -DllExport int -win32_dup2(int fd1,int fd2) -{ - return xcedup2(fd1,fd2); -} - -DllExport int -win32_read(int fd, void *buf, unsigned int cnt) -{ - return xceread(fd, buf, cnt); -} - -DllExport int -win32_write(int fd, const void *buf, unsigned int cnt) -{ - return xcewrite(fd, (void *) buf, cnt); -} - -DllExport int -win32_mkdir(const char *dir, int mode) -{ - return xcemkdir(dir); -} - -DllExport int -win32_rmdir(const char *dir) -{ - return xcermdir(dir); -} - -DllExport int -win32_chdir(const char *dir) -{ - return xcechdir(dir); -} - -DllExport int -win32_access(const char *path, int mode) -{ - return xceaccess(path, mode); -} - -DllExport int -win32_chmod(const char *path, int mode) -{ - return xcechmod(path, mode); -} - -static char * -create_command_line(char *cname, STRLEN clen, const char * const *args) -{ - dTHX; - int index, argc; - char *cmd, *ptr; - const char *arg; - STRLEN len = 0; - bool bat_file = FALSE; - bool cmd_shell = FALSE; - bool dumb_shell = FALSE; - bool extra_quotes = FALSE; - bool quote_next = FALSE; - - if (!cname) - cname = (char*)args[0]; - - /* The NT cmd.exe shell has the following peculiarity that needs to be - * worked around. It strips a leading and trailing dquote when any - * of the following is true: - * 1. the /S switch was used - * 2. there are more than two dquotes - * 3. there is a special character from this set: &<>()@^| - * 4. no whitespace characters within the two dquotes - * 5. string between two dquotes isn't an executable file - * To work around this, we always add a leading and trailing dquote - * to the string, if the first argument is either "cmd.exe" or "cmd", - * and there were at least two or more arguments passed to cmd.exe - * (not including switches). - * XXX the above rules (from "cmd /?") don't seem to be applied - * always, making for the convolutions below :-( - */ - if (cname) { - if (!clen) - clen = strlen(cname); - - if (clen > 4 - && (stricmp(&cname[clen-4], ".bat") == 0 - || (IsWinNT() && stricmp(&cname[clen-4], ".cmd") == 0))) - { - bat_file = TRUE; - len += 3; - } - else { - char *exe = strrchr(cname, '/'); - char *exe2 = strrchr(cname, '\\'); - if (exe2 > exe) - exe = exe2; - if (exe) - ++exe; - else - exe = cname; - if (stricmp(exe, "cmd.exe") == 0 || stricmp(exe, "cmd") == 0) { - cmd_shell = TRUE; - len += 3; - } - else if (stricmp(exe, "command.com") == 0 - || stricmp(exe, "command") == 0) - { - dumb_shell = TRUE; - } - } - } - - DEBUG_p(PerlIO_printf(Perl_debug_log, "Args ")); - for (index = 0; (arg = (char*)args[index]) != NULL; ++index) { - STRLEN curlen = strlen(arg); - if (!(arg[0] == '"' && arg[curlen-1] == '"')) - len += 2; /* assume quoting needed (worst case) */ - len += curlen + 1; - DEBUG_p(PerlIO_printf(Perl_debug_log, "[%s]",arg)); - } - DEBUG_p(PerlIO_printf(Perl_debug_log, "\n")); - - argc = index; - Newx(cmd, len, char); - ptr = cmd; - - if (bat_file) { - *ptr++ = '"'; - extra_quotes = TRUE; - } - - for (index = 0; (arg = (char*)args[index]) != NULL; ++index) { - bool do_quote = 0; - STRLEN curlen = strlen(arg); - - /* we want to protect empty arguments and ones with spaces with - * dquotes, but only if they aren't already there */ - if (!dumb_shell) { - if (!curlen) { - do_quote = 1; - } - else if (quote_next) { - /* see if it really is multiple arguments pretending to - * be one and force a set of quotes around it */ - if (*find_next_space(arg)) - do_quote = 1; - } - else if (!(arg[0] == '"' && curlen > 1 && arg[curlen-1] == '"')) { - STRLEN i = 0; - while (i < curlen) { - if (isSPACE(arg[i])) { - do_quote = 1; - } - else if (arg[i] == '"') { - do_quote = 0; - break; - } - i++; - } - } - } - - if (do_quote) - *ptr++ = '"'; - - strcpy(ptr, arg); - ptr += curlen; - - if (do_quote) - *ptr++ = '"'; - - if (args[index+1]) - *ptr++ = ' '; - - if (!extra_quotes - && cmd_shell - && curlen >= 2 - && *arg == '/' /* see if arg is "/c", "/x/c", "/x/d/c" etc. */ - && stricmp(arg+curlen-2, "/c") == 0) - { - /* is there a next argument? */ - if (args[index+1]) { - /* are there two or more next arguments? */ - if (args[index+2]) { - *ptr++ = '"'; - extra_quotes = TRUE; - } - else { - /* single argument, force quoting if it has spaces */ - quote_next = TRUE; - } - } - } - } - - if (extra_quotes) - *ptr++ = '"'; - - *ptr = '\0'; - - return cmd; -} - -static char * -qualified_path(const char *cmd) -{ - dTHX; - char *pathstr; - char *fullcmd, *curfullcmd; - STRLEN cmdlen = 0; - int has_slash = 0; - - if (!cmd) - return Nullch; - fullcmd = (char*)cmd; - while (*fullcmd) { - if (*fullcmd == '/' || *fullcmd == '\\') - has_slash++; - fullcmd++; - cmdlen++; - } - - /* look in PATH */ - pathstr = PerlEnv_getenv("PATH"); - Newx(fullcmd, MAX_PATH+1, char); - curfullcmd = fullcmd; - - while (1) { - DWORD res; - - /* start by appending the name to the current prefix */ - strcpy(curfullcmd, cmd); - curfullcmd += cmdlen; - - /* if it doesn't end with '.', or has no extension, try adding - * a trailing .exe first */ - if (cmd[cmdlen-1] != '.' - && (cmdlen < 4 || cmd[cmdlen-4] != '.')) - { - strcpy(curfullcmd, ".exe"); - res = GetFileAttributes(fullcmd); - if (res != 0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY)) - return fullcmd; - *curfullcmd = '\0'; - } - - /* that failed, try the bare name */ - res = GetFileAttributes(fullcmd); - if (res != 0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY)) - return fullcmd; - - /* quit if no other path exists, or if cmd already has path */ - if (!pathstr || !*pathstr || has_slash) - break; - - /* skip leading semis */ - while (*pathstr == ';') - pathstr++; - - /* build a new prefix from scratch */ - curfullcmd = fullcmd; - while (*pathstr && *pathstr != ';') { - if (*pathstr == '"') { /* foo;"baz;etc";bar */ - pathstr++; /* skip initial '"' */ - while (*pathstr && *pathstr != '"') { - if ((STRLEN)(curfullcmd-fullcmd) < MAX_PATH-cmdlen-5) - *curfullcmd++ = *pathstr; - pathstr++; - } - if (*pathstr) - pathstr++; /* skip trailing '"' */ - } - else { - if ((STRLEN)(curfullcmd-fullcmd) < MAX_PATH-cmdlen-5) - *curfullcmd++ = *pathstr; - pathstr++; - } - } - if (*pathstr) - pathstr++; /* skip trailing semi */ - if (curfullcmd > fullcmd /* append a dir separator */ - && curfullcmd[-1] != '/' && curfullcmd[-1] != '\\') - { - *curfullcmd++ = '\\'; - } - } - - Safefree(fullcmd); - return Nullch; -} - -/* The following are just place holders. - * Some hosts may provide and environment that the OS is - * not tracking, therefore, these host must provide that - * environment and the current directory to CreateProcess - */ - -DllExport void* -win32_get_childenv(void) -{ - return NULL; -} - -DllExport void -win32_free_childenv(void* d) -{ -} - -DllExport void -win32_clearenv(void) -{ - char *envv = GetEnvironmentStrings(); - char *cur = envv; - STRLEN len; - while (*cur) { - char *end = strchr(cur,'='); - if (end && end != cur) { - *end = '\0'; - xcesetenv(cur, "", 0); - *end = '='; - cur = end + strlen(end+1)+2; - } - else if ((len = strlen(cur))) - cur += len+1; - } - FreeEnvironmentStrings(envv); -} - -DllExport char* -win32_get_childdir(void) -{ - dTHX; - char* ptr; - char szfilename[MAX_PATH+1]; - GetCurrentDirectoryA(MAX_PATH+1, szfilename); - - Newx(ptr, strlen(szfilename)+1, char); - strcpy(ptr, szfilename); - return ptr; -} - -DllExport void -win32_free_childdir(char* d) -{ - dTHX; - Safefree(d); -} - -/* XXX this needs to be made more compatible with the spawnvp() - * provided by the various RTLs. In particular, searching for - * *.{com,bat,cmd} files (as done by the RTLs) is unimplemented. - * This doesn't significantly affect perl itself, because we - * always invoke things using PERL5SHELL if a direct attempt to - * spawn the executable fails. - * - * XXX splitting and rejoining the commandline between do_aspawn() - * and win32_spawnvp() could also be avoided. - */ - -DllExport int -win32_spawnvp(int mode, const char *cmdname, const char *const *argv) -{ -#ifdef USE_RTL_SPAWNVP - return spawnvp(mode, cmdname, (char * const *)argv); -#else - dTHX; - int ret; - void* env; - char* dir; - child_IO_table tbl; - STARTUPINFO StartupInfo; - PROCESS_INFORMATION ProcessInformation; - DWORD create = 0; - char *cmd; - char *fullcmd = Nullch; - char *cname = (char *)cmdname; - STRLEN clen = 0; - - if (cname) { - clen = strlen(cname); - /* if command name contains dquotes, must remove them */ - if (strchr(cname, '"')) { - cmd = cname; - Newx(cname,clen+1,char); - clen = 0; - while (*cmd) { - if (*cmd != '"') { - cname[clen] = *cmd; - ++clen; - } - ++cmd; - } - cname[clen] = '\0'; - } - } - - cmd = create_command_line(cname, clen, argv); - - env = PerlEnv_get_childenv(); - dir = PerlEnv_get_childdir(); - - switch(mode) { - case P_NOWAIT: /* asynch + remember result */ - if (w32_num_children >= MAXIMUM_WAIT_OBJECTS) { - errno = EAGAIN; - ret = -1; - goto RETVAL; - } - /* Create a new process group so we can use GenerateConsoleCtrlEvent() - * in win32_kill() - */ - /* not supported on CE create |= CREATE_NEW_PROCESS_GROUP; */ - /* FALL THROUGH */ - - case P_WAIT: /* synchronous execution */ - break; - default: /* invalid mode */ - errno = EINVAL; - ret = -1; - goto RETVAL; - } - memset(&StartupInfo,0,sizeof(StartupInfo)); - StartupInfo.cb = sizeof(StartupInfo); - memset(&tbl,0,sizeof(tbl)); - PerlEnv_get_child_IO(&tbl); - StartupInfo.dwFlags = tbl.dwFlags; - StartupInfo.dwX = tbl.dwX; - StartupInfo.dwY = tbl.dwY; - StartupInfo.dwXSize = tbl.dwXSize; - StartupInfo.dwYSize = tbl.dwYSize; - StartupInfo.dwXCountChars = tbl.dwXCountChars; - StartupInfo.dwYCountChars = tbl.dwYCountChars; - StartupInfo.dwFillAttribute = tbl.dwFillAttribute; - StartupInfo.wShowWindow = tbl.wShowWindow; - StartupInfo.hStdInput = tbl.childStdIn; - StartupInfo.hStdOutput = tbl.childStdOut; - StartupInfo.hStdError = tbl.childStdErr; - if (StartupInfo.hStdInput == INVALID_HANDLE_VALUE && - StartupInfo.hStdOutput == INVALID_HANDLE_VALUE && - StartupInfo.hStdError == INVALID_HANDLE_VALUE) - { - create |= CREATE_NEW_CONSOLE; - } - else { - StartupInfo.dwFlags |= STARTF_USESTDHANDLES; - } - if (w32_use_showwindow) { - StartupInfo.dwFlags |= STARTF_USESHOWWINDOW; - StartupInfo.wShowWindow = w32_showwindow; - } - - DEBUG_p(PerlIO_printf(Perl_debug_log, "Spawning [%s] with [%s]\n", - cname,cmd)); -RETRY: - if (!CreateProcess(cname, /* search PATH to find executable */ - cmd, /* executable, and its arguments */ - NULL, /* process attributes */ - NULL, /* thread attributes */ - TRUE, /* inherit handles */ - create, /* creation flags */ - (LPVOID)env, /* inherit environment */ - dir, /* inherit cwd */ - &StartupInfo, - &ProcessInformation)) - { - /* initial NULL argument to CreateProcess() does a PATH - * search, but it always first looks in the directory - * where the current process was started, which behavior - * is undesirable for backward compatibility. So we - * jump through our own hoops by picking out the path - * we really want it to use. */ - if (!fullcmd) { - fullcmd = qualified_path(cname); - if (fullcmd) { - if (cname != cmdname) - Safefree(cname); - cname = fullcmd; - DEBUG_p(PerlIO_printf(Perl_debug_log, - "Retrying [%s] with same args\n", - cname)); - goto RETRY; - } - } - errno = ENOENT; - ret = -1; - goto RETVAL; - } - - if (mode == P_NOWAIT) { - /* asynchronous spawn -- store handle, return PID */ - ret = (int)ProcessInformation.dwProcessId; - if (IsWin95() && ret < 0) - ret = -ret; - - w32_child_handles[w32_num_children] = ProcessInformation.hProcess; - w32_child_pids[w32_num_children] = (DWORD)ret; - ++w32_num_children; - } - else { - DWORD status; - win32_msgwait(aTHX_ 1, &ProcessInformation.hProcess, INFINITE, NULL); - /* FIXME: if msgwait returned due to message perhaps forward the - "signal" to the process - */ - GetExitCodeProcess(ProcessInformation.hProcess, &status); - ret = (int)status; - CloseHandle(ProcessInformation.hProcess); - } - - CloseHandle(ProcessInformation.hThread); - -RETVAL: - PerlEnv_free_childenv(env); - PerlEnv_free_childdir(dir); - Safefree(cmd); - if (cname != cmdname) - Safefree(cname); - return ret; -#endif -} - -DllExport int -win32_execv(const char *cmdname, const char *const *argv) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "execv"); - return -1; -} - -DllExport int -win32_execvp(const char *cmdname, const char *const *argv) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "execvp"); - return -1; -} - -DllExport void -win32_perror(const char *str) -{ - xceperror(str); -} - -DllExport void -win32_setbuf(FILE *pf, char *buf) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "setbuf"); -} - -DllExport int -win32_setvbuf(FILE *pf, char *buf, int type, size_t size) -{ - return setvbuf(pf, buf, type, size); -} - -DllExport int -win32_flushall(void) -{ - return flushall(); -} - -DllExport int -win32_fcloseall(void) -{ - return fcloseall(); -} - -DllExport char* -win32_fgets(char *s, int n, FILE *pf) -{ - return fgets(s, n, pf); -} - -DllExport char* -win32_gets(char *s) -{ - return gets(s); -} - -DllExport int -win32_fgetc(FILE *pf) -{ - return fgetc(pf); -} - -DllExport int -win32_putc(int c, FILE *pf) -{ - return putc(c,pf); -} - -DllExport int -win32_puts(const char *s) -{ - return puts(s); -} - -DllExport int -win32_getchar(void) -{ - return getchar(); -} - -DllExport int -win32_putchar(int c) -{ - return putchar(c); -} - -#ifdef MYMALLOC - -#ifndef USE_PERL_SBRK - -static char *committed = NULL; -static char *base = NULL; -static char *reserved = NULL; -static char *brk = NULL; -static DWORD pagesize = 0; -static DWORD allocsize = 0; - -void * -sbrk(int need) -{ - void *result; - if (!pagesize) - {SYSTEM_INFO info; - GetSystemInfo(&info); - /* Pretend page size is larger so we don't perpetually - * call the OS to commit just one page ... - */ - pagesize = info.dwPageSize << 3; - allocsize = info.dwAllocationGranularity; - } - /* This scheme fails eventually if request for contiguous - * block is denied so reserve big blocks - this is only - * address space not memory ... - */ - if (brk+need >= reserved) - { - DWORD size = 64*1024*1024; - char *addr; - if (committed && reserved && committed < reserved) - { - /* Commit last of previous chunk cannot span allocations */ - addr = (char *) VirtualAlloc(committed,reserved-committed,MEM_COMMIT,PAGE_READWRITE); - if (addr) - committed = reserved; - } - /* Reserve some (more) space - * Note this is a little sneaky, 1st call passes NULL as reserved - * so lets system choose where we start, subsequent calls pass - * the old end address so ask for a contiguous block - */ - addr = (char *) VirtualAlloc(reserved,size,MEM_RESERVE,PAGE_NOACCESS); - if (addr) - { - reserved = addr+size; - if (!base) - base = addr; - if (!committed) - committed = base; - if (!brk) - brk = committed; - } - else - { - return (void *) -1; - } - } - result = brk; - brk += need; - if (brk > committed) - { - DWORD size = ((brk-committed + pagesize -1)/pagesize) * pagesize; - char *addr = (char *) VirtualAlloc(committed,size,MEM_COMMIT,PAGE_READWRITE); - if (addr) - { - committed += size; - } - else - return (void *) -1; - } - return result; -} - -#endif -#endif - -DllExport void* -win32_malloc(size_t size) -{ - return malloc(size); -} - -DllExport void* -win32_calloc(size_t numitems, size_t size) -{ - return calloc(numitems,size); -} - -DllExport void* -win32_realloc(void *block, size_t size) -{ - return realloc(block,size); -} - -DllExport void -win32_free(void *block) -{ - free(block); -} - -int -win32_open_osfhandle(intptr_t osfhandle, int flags) -{ - int fh; - char fileflags=0; /* _osfile flags */ - - Perl_croak_nocontext("win32_open_osfhandle() TBD on this platform"); - return 0; -} - -int -win32_get_osfhandle(int fd) -{ - int fh; - char fileflags=0; /* _osfile flags */ - - Perl_croak_nocontext("win32_get_osfhandle() TBD on this platform"); - return 0; -} - -FILE * -win32_fdupopen(FILE *pf) -{ - FILE* pfdup; - fpos_t pos; - char mode[3]; - int fileno = win32_dup(win32_fileno(pf)); - int fmode = palm_fgetmode(pfdup); - - fprintf(stderr,"DEBUG for win32_fdupopen()\n"); - - /* open the file in the same mode */ - if(fmode & O_RDONLY) { - mode[0] = 'r'; - mode[1] = 0; - } - else if(fmode & O_APPEND) { - mode[0] = 'a'; - mode[1] = 0; - } - else if(fmode & O_RDWR) { - mode[0] = 'r'; - mode[1] = '+'; - mode[2] = 0; - } - - /* it appears that the binmode is attached to the - * file descriptor so binmode files will be handled - * correctly - */ - pfdup = win32_fdopen(fileno, mode); - - /* move the file pointer to the same position */ - if (!fgetpos(pf, &pos)) { - fsetpos(pfdup, &pos); - } - return pfdup; -} - -DllExport void* -win32_dynaload(const char* filename) -{ - dTHX; - HMODULE hModule; - - hModule = XCELoadLibraryA(filename); - - return hModule; -} - -/* this is needed by Cwd.pm... */ - -static -XS(w32_GetCwd) -{ - dXSARGS; - char buf[MAX_PATH]; - SV *sv = sv_newmortal(); - - xcegetcwd(buf, sizeof(buf)); - - sv_setpv(sv, xcestrdup(buf)); - EXTEND(SP,1); - SvPOK_on(sv); - ST(0) = sv; -#ifndef INCOMPLETE_TAINTS - SvTAINTED_on(ST(0)); -#endif - XSRETURN(1); -} - -static -XS(w32_SetCwd) -{ - dXSARGS; - - if (items != 1) - Perl_croak(aTHX_ "usage: Win32::SetCwd($cwd)"); - - if (!xcechdir(SvPV_nolen(ST(0)))) - XSRETURN_YES; - - XSRETURN_NO; -} - -static -XS(w32_GetTickCount) -{ - dXSARGS; - DWORD msec = GetTickCount(); - EXTEND(SP,1); - if ((IV)msec > 0) - XSRETURN_IV(msec); - XSRETURN_NV(msec); -} - -static -XS(w32_GetOSVersion) -{ - dXSARGS; - OSVERSIONINFOA osver; - - osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - if (!XCEGetVersionExA(&osver)) { - XSRETURN_EMPTY; - } - XPUSHs(newSVpvn(osver.szCSDVersion, strlen(osver.szCSDVersion))); - XPUSHs(newSViv(osver.dwMajorVersion)); - XPUSHs(newSViv(osver.dwMinorVersion)); - XPUSHs(newSViv(osver.dwBuildNumber)); - /* WINCE = 3 */ - XPUSHs(newSViv(osver.dwPlatformId)); - PUTBACK; -} - -static -XS(w32_IsWinNT) -{ - dXSARGS; - EXTEND(SP,1); - XSRETURN_IV(IsWinNT()); -} - -static -XS(w32_IsWin95) -{ - dXSARGS; - EXTEND(SP,1); - XSRETURN_IV(IsWin95()); -} - -static -XS(w32_IsWinCE) -{ - dXSARGS; - EXTEND(SP,1); - XSRETURN_IV(IsWinCE()); -} - -static -XS(w32_GetOemInfo) -{ - dXSARGS; - wchar_t wbuf[126]; - char buf[126]; - - if(SystemParametersInfoW(SPI_GETOEMINFO, sizeof(wbuf), wbuf, FALSE)) - WideCharToMultiByte(CP_ACP, 0, wbuf, -1, buf, sizeof(buf), 0, 0); - else - sprintf(buf, "SystemParametersInfo failed: %d", GetLastError()); - - EXTEND(SP,1); - XSRETURN_PV(buf); -} - -static -XS(w32_Sleep) -{ - dXSARGS; - if (items != 1) - Perl_croak(aTHX_ "usage: Win32::Sleep($milliseconds)"); - Sleep(SvIV(ST(0))); - XSRETURN_YES; -} - -static -XS(w32_CopyFile) -{ - dXSARGS; - BOOL bResult; - if (items != 3) - Perl_croak(aTHX_ "usage: Win32::CopyFile($from, $to, $overwrite)"); - - { - char szSourceFile[MAX_PATH+1]; - strcpy(szSourceFile, PerlDir_mapA(SvPV_nolen(ST(0)))); - bResult = XCECopyFileA(szSourceFile, SvPV_nolen(ST(1)), - !SvTRUE(ST(2))); - } - - if (bResult) - XSRETURN_YES; - - XSRETURN_NO; -} - -static -XS(w32_MessageBox) -{ - dXSARGS; - - char *txt; - unsigned int res; - unsigned int flags = MB_OK; - - txt = SvPV_nolen(ST(0)); - - if (items < 1 || items > 2) - Perl_croak(aTHX_ "usage: Win32::MessageBox($txt, [$flags])"); - - if(items == 2) - flags = SvIV(ST(1)); - - res = XCEMessageBoxA(NULL, txt, "Perl", flags); - - XSRETURN_IV(res); -} - -static -XS(w32_GetPowerStatus) -{ - dXSARGS; - - SYSTEM_POWER_STATUS_EX sps; - - if(GetSystemPowerStatusEx(&sps, TRUE) == FALSE) - { - XSRETURN_EMPTY; - } - - XPUSHs(newSViv(sps.ACLineStatus)); - XPUSHs(newSViv(sps.BatteryFlag)); - XPUSHs(newSViv(sps.BatteryLifePercent)); - XPUSHs(newSViv(sps.BatteryLifeTime)); - XPUSHs(newSViv(sps.BatteryFullLifeTime)); - XPUSHs(newSViv(sps.BackupBatteryFlag)); - XPUSHs(newSViv(sps.BackupBatteryLifePercent)); - XPUSHs(newSViv(sps.BackupBatteryLifeTime)); - XPUSHs(newSViv(sps.BackupBatteryFullLifeTime)); - - PUTBACK; -} - -#if UNDER_CE > 200 -static -XS(w32_ShellEx) -{ - dXSARGS; - - char buf[126]; - SHELLEXECUTEINFO si; - char *file, *verb; - wchar_t wfile[MAX_PATH]; - wchar_t wverb[20]; - - if (items != 2) - Perl_croak(aTHX_ "usage: Win32::ShellEx($file, $verb)"); - - file = SvPV_nolen(ST(0)); - verb = SvPV_nolen(ST(1)); - - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SEE_MASK_FLAG_NO_UI; - - MultiByteToWideChar(CP_ACP, 0, verb, -1, - wverb, sizeof(wverb)/2); - si.lpVerb = (TCHAR *)wverb; - - MultiByteToWideChar(CP_ACP, 0, file, -1, - wfile, sizeof(wfile)/2); - si.lpFile = (TCHAR *)wfile; - - if(ShellExecuteEx(&si) == FALSE) - { - XSRETURN_NO; - } - XSRETURN_YES; -} -#endif - -void -Perl_init_os_extras(void) -{ - dTHX; - char *file = __FILE__; - dXSUB_SYS; - - w32_perlshell_tokens = Nullch; - w32_perlshell_items = -1; - w32_fdpid = newAV(); /* XX needs to be in Perl_win32_init()? */ - Newx(w32_children, 1, child_tab); - w32_num_children = 0; - - newXS("Win32::GetCwd", w32_GetCwd, file); - newXS("Win32::SetCwd", w32_SetCwd, file); - newXS("Win32::GetTickCount", w32_GetTickCount, file); - newXS("Win32::GetOSVersion", w32_GetOSVersion, file); -#if UNDER_CE > 200 - newXS("Win32::ShellEx", w32_ShellEx, file); -#endif - newXS("Win32::IsWinNT", w32_IsWinNT, file); - newXS("Win32::IsWin95", w32_IsWin95, file); - newXS("Win32::IsWinCE", w32_IsWinCE, file); - newXS("Win32::CopyFile", w32_CopyFile, file); - newXS("Win32::Sleep", w32_Sleep, file); - newXS("Win32::MessageBox", w32_MessageBox, file); - newXS("Win32::GetPowerStatus", w32_GetPowerStatus, file); - newXS("Win32::GetOemInfo", w32_GetOemInfo, file); -} - -void -myexit(void) -{ - char buf[126]; - - puts("Hit return"); - fgets(buf, sizeof(buf), stdin); -} - -void -Perl_win32_init(int *argcp, char ***argvp) -{ -#ifdef UNDER_CE - char *p; - - if((p = xcegetenv("PERLDEBUG")) && (p[0] == 'y' || p[0] == 'Y')) - atexit(myexit); -#endif - - MALLOC_INIT; -} - -DllExport void -Perl_win32_term(void) -{ - HINTS_REFCNT_TERM; - OP_REFCNT_TERM; - MALLOC_TERM; -} - -void -win32_get_child_IO(child_IO_table* ptbl) -{ - ptbl->childStdIn = GetStdHandle(STD_INPUT_HANDLE); - ptbl->childStdOut = GetStdHandle(STD_OUTPUT_HANDLE); - ptbl->childStdErr = GetStdHandle(STD_ERROR_HANDLE); -} - -win32_flock(int fd, int oper) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "flock"); - return -1; -} - -DllExport int -win32_waitpid(int pid, int *status, int flags) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "waitpid"); - return -1; -} - -DllExport int -win32_wait(int *status) -{ - dTHX; - Perl_croak(aTHX_ PL_no_func, "wait"); - return -1; -} - -int -wce_reopen_stdout(char *fname) -{ - if(xcefreopen(fname, "w", stdout) == NULL) - return -1; - - return 0; -} - -void -wce_hitreturn() -{ - char buf[126]; - - printf("Hit RETURN"); - fflush(stdout); - fgets(buf, sizeof(buf), stdin); - return; -} - -/* //////////////////////////////////////////////////////////////////// */ - -#undef getcwd - -char * -getcwd(char *buf, size_t size) -{ - return xcegetcwd(buf, size); -} - -int -isnan(double d) -{ - return _isnan(d); -} - - -DllExport PerlIO* -win32_popenlist(const char *mode, IV narg, SV **args) -{ - dTHX; - Perl_croak(aTHX_ "List form of pipe open not implemented"); - return NULL; -} - -/* - * a popen() clone that respects PERL5SHELL - * - * changed to return PerlIO* rather than FILE * by BKS, 11-11-2000 - */ - -DllExport PerlIO* -win32_popen(const char *command, const char *mode) -{ -#ifdef USE_RTL_POPEN - return _popen(command, mode); -#else - dTHX; - int p[2]; - int parent, child; - int stdfd, oldfd; - int ourmode; - int childpid; - DWORD nhandle; - HANDLE old_h; - int lock_held = 0; - - /* establish which ends read and write */ - if (strchr(mode,'w')) { - stdfd = 0; /* stdin */ - parent = 1; - child = 0; - nhandle = STD_INPUT_HANDLE; - } - else if (strchr(mode,'r')) { - stdfd = 1; /* stdout */ - parent = 0; - child = 1; - nhandle = STD_OUTPUT_HANDLE; - } - else - return NULL; - - /* set the correct mode */ - if (strchr(mode,'b')) - ourmode = O_BINARY; - else if (strchr(mode,'t')) - ourmode = O_TEXT; - else - ourmode = _fmode & (O_TEXT | O_BINARY); - - /* the child doesn't inherit handles */ - ourmode |= O_NOINHERIT; - - if (win32_pipe(p, 512, ourmode) == -1) - return NULL; - - /* save current stdfd */ - if ((oldfd = win32_dup(stdfd)) == -1) - goto cleanup; - - /* save the old std handle (this needs to happen before the - * dup2(), since that might call SetStdHandle() too) */ - OP_REFCNT_LOCK; - lock_held = 1; - old_h = GetStdHandle(nhandle); - - /* make stdfd go to child end of pipe (implicitly closes stdfd) */ - /* stdfd will be inherited by the child */ - if (win32_dup2(p[child], stdfd) == -1) - goto cleanup; - - /* close the child end in parent */ - win32_close(p[child]); - - /* set the new std handle (in case dup2() above didn't) */ - SetStdHandle(nhandle, (HANDLE)_get_osfhandle(stdfd)); - - /* start the child */ - { - dTHX; - if ((childpid = do_spawn_nowait((char*)command)) == -1) - goto cleanup; - - /* revert stdfd to whatever it was before */ - if (win32_dup2(oldfd, stdfd) == -1) - goto cleanup; - - /* restore the old std handle (this needs to happen after the - * dup2(), since that might call SetStdHandle() too */ - if (lock_held) { - SetStdHandle(nhandle, old_h); - OP_REFCNT_UNLOCK; - lock_held = 0; - } - - /* close saved handle */ - win32_close(oldfd); - - LOCK_FDPID_MUTEX; - sv_setiv(*av_fetch(w32_fdpid, p[parent], TRUE), childpid); - UNLOCK_FDPID_MUTEX; - - /* set process id so that it can be returned by perl's open() */ - PL_forkprocess = childpid; - } - - /* we have an fd, return a file stream */ - return (PerlIO_fdopen(p[parent], (char *)mode)); - -cleanup: - /* we don't need to check for errors here */ - win32_close(p[0]); - win32_close(p[1]); - if (lock_held) { - SetStdHandle(nhandle, old_h); - OP_REFCNT_UNLOCK; - lock_held = 0; - } - if (oldfd != -1) { - win32_dup2(oldfd, stdfd); - win32_close(oldfd); - } - return (NULL); - -#endif /* USE_RTL_POPEN */ -} - -/* - * pclose() clone - */ - -DllExport int -win32_pclose(PerlIO *pf) -{ -#ifdef USE_RTL_POPEN - return _pclose(pf); -#else - dTHX; - int childpid, status; - SV *sv; - - LOCK_FDPID_MUTEX; - sv = *av_fetch(w32_fdpid, PerlIO_fileno(pf), TRUE); - - if (SvIOK(sv)) - childpid = SvIVX(sv); - else - childpid = 0; - - if (!childpid) { - UNLOCK_FDPID_MUTEX; - errno = EBADF; - return -1; - } - -#ifdef USE_PERLIO - PerlIO_close(pf); -#else - fclose(pf); -#endif - SvIVX(sv) = 0; - UNLOCK_FDPID_MUTEX; - - if (win32_waitpid(childpid, &status, 0) == -1) - return -1; - - return status; - -#endif /* USE_RTL_POPEN */ -} - -#ifdef HAVE_INTERP_INTERN - - -static void -win32_csighandler(int sig) -{ -#if 0 - dTHXa(PERL_GET_SIG_CONTEXT); - Perl_warn(aTHX_ "Got signal %d",sig); -#endif - /* Does nothing */ -} - -void -Perl_sys_intern_init(pTHX) -{ - int i; - w32_perlshell_tokens = Nullch; - w32_perlshell_vec = (char**)NULL; - w32_perlshell_items = 0; - w32_fdpid = newAV(); - Newx(w32_children, 1, child_tab); - w32_num_children = 0; -# ifdef USE_ITHREADS - w32_pseudo_id = 0; - Newx(w32_pseudo_children, 1, child_tab); - w32_num_pseudo_children = 0; -# endif - w32_init_socktype = 0; - w32_timerid = 0; - w32_poll_count = 0; -} - -void -Perl_sys_intern_clear(pTHX) -{ - Safefree(w32_perlshell_tokens); - Safefree(w32_perlshell_vec); - /* NOTE: w32_fdpid is freed by sv_clean_all() */ - Safefree(w32_children); - if (w32_timerid) { - KillTimer(NULL,w32_timerid); - w32_timerid=0; - } -# ifdef USE_ITHREADS - Safefree(w32_pseudo_children); -# endif -} - -# ifdef USE_ITHREADS - -void -Perl_sys_intern_dup(pTHX_ struct interp_intern *src, struct interp_intern *dst) -{ - dst->perlshell_tokens = Nullch; - dst->perlshell_vec = (char**)NULL; - dst->perlshell_items = 0; - dst->fdpid = newAV(); - Newxz(dst->children, 1, child_tab); - dst->pseudo_id = 0; - Newxz(dst->pseudo_children, 1, child_tab); - dst->thr_intern.Winit_socktype = 0; - dst->timerid = 0; - dst->poll_count = 0; - Copy(src->sigtable,dst->sigtable,SIG_SIZE,Sighandler_t); -} -# endif /* USE_ITHREADS */ -#endif /* HAVE_INTERP_INTERN */ - -static void -win32_free_argvw(pTHX_ void *ptr) -{ - char** argv = (char**)ptr; - while(*argv) { - Safefree(*argv); - *argv++ = Nullch; - } -} - -void -win32_argv2utf8(int argc, char** argv) -{ - /* do nothing, since we're not aware of command line arguments - * currently ... - */ -} - -#if 0 -void -Perl_sys_intern_clear(pTHX) -{ - Safefree(w32_perlshell_tokens); - Safefree(w32_perlshell_vec); - /* NOTE: w32_fdpid is freed by sv_clean_all() */ - Safefree(w32_children); -# ifdef USE_ITHREADS - Safefree(w32_pseudo_children); -# endif -} - -#endif -// added to remove undefied symbol error in CodeWarrior compilation -int -Perl_Ireentrant_buffer_ptr(aTHX) -{ - return 0; -} diff --git a/wince/wince.h b/wince/wince.h deleted file mode 100644 index f4264dd8bd..0000000000 --- a/wince/wince.h +++ /dev/null @@ -1,156 +0,0 @@ -/* wince.h */ - -/* Time-stamp: <01/08/01 20:48:08 keuchel@w2k> */ - -/* This file includes extracts from the celib-headers, because */ -/* the celib-headers produces macro conflicts with defines in */ -/* win32iop.h etc */ - -#ifndef WINCE_H -#define WINCE_H 1 - -#include "celib_defs.h" - -/* include local copies of celib headers... */ -#include "errno.h" -#include "sys/stat.h" -#include "time.h" -#include "cectype.h" - -#ifndef START_EXTERN_C -#undef EXTERN_C -#ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } -# define EXTERN_C extern "C" -#else -# define START_EXTERN_C -# define END_EXTERN_C -# define EXTERN_C -#endif -#endif - -START_EXTERN_C - -#ifndef _IOFBF -#define _IOFBF 0x0000 -#endif -#ifndef _IOLBF -#define _IOLBF 0x0040 -#endif -#ifndef _IONBF -#define _IONBF 0x0004 -#endif - -#if UNDER_CE <= 200 -XCE_EXPORT double xceatof(const char *); -XCE_EXPORT int xcetoupper(int c); -XCE_EXPORT int xcetolower(int c); -#define atof xceatof -#define toupper xcetoupper -#define tolower xcetolower -#else -XCE_EXPORT double atof(const char *); -#endif - -XCE_EXPORT void XCEShowMessageA(const char *fmt, ...); - -#define time xcetime -#define gmtime xcegmtime -#define localtime xcelocaltime -#define asctime xceasctime -/* #define utime xceutime */ -#define futime xcefutime -#define ftime xceftime -#define ctime xcectime -#define gettimeofday xcegettimeofday -#define GetSystemTimeAsFileTime XCEGetSystemTimeAsFileTime - -XCE_EXPORT int xcesetuid(uid_t id); -XCE_EXPORT int xceseteuid(uid_t id); -XCE_EXPORT int xcegetuid(); -XCE_EXPORT int xcegeteuid(); - -XCE_EXPORT int xcesetgid(int id); -XCE_EXPORT int xcesetegid(int id); -XCE_EXPORT int xcegetgid(); -XCE_EXPORT int xcegetegid(); - -#define setuid xcesetuid -#define getuid xcegetuid -#define geteuid xcegeteuid -#define seteuid xceseteuid - -#define setgid xcesetgid -#define getgid xcegetgid -#define getegid xcegetegid -#define setegid xcesetegid - -XCE_EXPORT int xcechown(const char *filename, int owner, int group); -#define chown xcechown - -XCE_EXPORT char *xcestrrchr(const char * string, int ch); -#define strrchr xcestrrchr - -XCE_EXPORT void (*xcesignal(int, void (*)(int)))(int); -XCE_EXPORT int xceraise(int); -#define signal xcesignal -#define raise xceraise - -XCE_EXPORT int xcecreat(const char *filename, int pmode); -XCE_EXPORT int xceopen(const char *fname, int mode, ...); -XCE_EXPORT int xceread(int fd, void *buf, int size); -XCE_EXPORT int xcewrite(int fd, void *buf, int size); -XCE_EXPORT int xceclose(int fd); -XCE_EXPORT off_t xcelseek(int fd, int off, int whence); - -XCE_EXPORT char *xcestrupr(char *string); -XCE_EXPORT char *xcestrlwr(char *string); -#define strupr xcestrupr -#define strlwr xcestrlwr - -XCE_EXPORT double xcestrtod(const char *s, char **errorptr); -XCE_EXPORT long xcestrtol(const char *s, char **errorptr, int base); -XCE_EXPORT unsigned long xcestrtoul(const char *s, char **errorptr, int base); -#define strtod xcestrtod -#define strtol xcestrtol -#define strtoul xcestrtoul - -XCE_EXPORT int xcestrnicmp(const char *first, const char *last, size_t count); -#define strnicmp xcestrnicmp - -XCE_EXPORT int xceumask(int mask); -#define umask xceumask - -XCE_EXPORT int xceisatty(int fd); -#define isatty xceisatty - -XCE_EXPORT int xcechsize(int fd, unsigned long size); -#define chsize xcechsize - -XCE_EXPORT char *xcegetlogin(); -#define getlogin xcegetlogin - -XCE_EXPORT DWORD XCEAPI XCEGetModuleFileNameA(HMODULE hModule, LPTSTR lpName, DWORD nSize); -XCE_EXPORT HMODULE XCEAPI XCEGetModuleHandleA(const char *lpName); -XCE_EXPORT FARPROC XCEAPI XCEGetProcAddressA(HMODULE hMod, const char *name); - -/* //////////////////////////////////////////////////////////////////// */ - -#define getgid xcegetgid -#define getegid xcegetegid -#define geteuid xcegeteuid -#define setgid xcesetgid - -#define strupr xcestrupr -#define time xcetime - -XCE_EXPORT BOOL XCEFreeEnvironmentStrings(LPCSTR buf); -#define GetEnvironmentStrings XCEGetEnvironmentStrings -#define FreeEnvironmentStrings XCEFreeEnvironmentStrings - -void wce_hitreturn(); - -END_EXTERN_C - -#endif diff --git a/wince/wincesck.c b/wince/wincesck.c deleted file mode 100644 index 09f5dfbc2b..0000000000 --- a/wince/wincesck.c +++ /dev/null @@ -1,499 +0,0 @@ -/* Time-stamp: <01/08/01 21:01:12 keuchel@w2k> */ - -/* wincesck.c - * - * (c) 1995 Microsoft Corporation. All rights reserved. - * Developed by hip communications inc., http://info.hip.com/info/ - * Portions (c) 1993 Intergraph Corporation. All rights reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - */ - -/* The socket calls use fd functions from celib... */ - -#define WIN32IO_IS_STDIO -#define WIN32SCK_IS_STDSCK -#define WIN32_LEAN_AND_MEAN - -#ifdef __GNUC__ -#define Win32_Winsock -#endif - -#include <windows.h> - -#define wince_private -#include "errno.h" - -#include "EXTERN.h" -#include "perl.h" - -#include "Win32iop.h" -#include <sys/socket.h> - -#ifndef UNDER_CE -#include <fcntl.h> -#include <sys/stat.h> -#include <assert.h> -#include <io.h> -#endif - -#ifdef UNDER_CE - -XCE_EXPORT struct servent *xcegetservbyname(const char *sname, const char *sproto); -XCE_EXPORT struct servent * xcegetservbyport(int aport, const char *sproto); -XCE_EXPORT struct protoent *xcegetprotobyname(const char *name); -XCE_EXPORT struct protoent *xcegetprotobynumber(int number); - -#define getservbyname xcegetservbyname -#define getservbyport xcegetservbyport -#define getprotobyname xcegetprotobyname -#define getprotobynumber xcegetprotobynumber - -/* uses fdtab... */ -#include "cesocket2.h" - -#endif - -#define TO_SOCKET(X) (X) - -#define StartSockets() \ - STMT_START { \ - if (!wsock_started) { \ - start_sockets(); \ - set_socktype(); \ - } \ - } STMT_END - -#define EndSockets() \ - STMT_START { \ - if (wsock_started) \ - WSACleanup(); \ - } STMT_END - -#define SOCKET_TEST(x, y) \ - STMT_START { \ - StartSockets(); \ - if((x) == (y)) \ - errno = WSAGetLastError(); \ - } STMT_END - -#define SOCKET_TEST_ERROR(x) SOCKET_TEST(x, SOCKET_ERROR) - -static struct servent* win32_savecopyservent(struct servent*d, - struct servent*s, - const char *proto); - -static int wsock_started = 0; - -void -start_sockets(void) -{ - dTHX; - unsigned short version; - WSADATA retdata; - int ret; - - /* - * initalize the winsock interface and insure that it is - * cleaned up at exit. - */ - version = 0x101; - if(ret = WSAStartup(version, &retdata)) - Perl_croak_nocontext("Unable to locate winsock library!\n"); - if(retdata.wVersion != version) - Perl_croak_nocontext("Could not find version 1.1 of winsock dll\n"); - - /* atexit((void (*)(void)) EndSockets); */ - wsock_started = 1; -} - -void -set_socktype(void) -{ -} - -u_long -win32_htonl(u_long hostlong) -{ - StartSockets(); - return htonl(hostlong); -} - -u_short -win32_htons(u_short hostshort) -{ - StartSockets(); - return htons(hostshort); -} - -u_long -win32_ntohl(u_long netlong) -{ - StartSockets(); - return ntohl(netlong); -} - -u_short -win32_ntohs(u_short netshort) -{ - StartSockets(); - return ntohs(netshort); -} - -SOCKET -win32_socket(int af, int type, int protocol) -{ - StartSockets(); - return xcesocket(af, type, protocol); -} - -SOCKET -win32_accept(SOCKET s, struct sockaddr *addr, int *addrlen) -{ - StartSockets(); - return xceaccept(s, addr, addrlen); -} - -int -win32_bind(SOCKET s, const struct sockaddr *addr, int addrlen) -{ - StartSockets(); - return xcebind(s, addr, addrlen); -} - -int -win32_connect(SOCKET s, const struct sockaddr *addr, int addrlen) -{ - StartSockets(); - return xceconnect(s, addr, addrlen); -} - - -int -win32_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen) -{ - StartSockets(); - return xcegetpeername(s, addr, addrlen); -} - -int -win32_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen) -{ - StartSockets(); - return xcegetsockname(s, addr, addrlen); -} - -int -win32_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen) -{ - StartSockets(); - return xcegetsockopt(s, level, optname, optval, optlen); -} - -int -win32_ioctlsocket(SOCKET s, long cmd, u_long *argp) -{ - StartSockets(); - return xceioctlsocket(s, cmd, argp); -} - -int -win32_listen(SOCKET s, int backlog) -{ - StartSockets(); - return xcelisten(s, backlog); -} - -int -win32_recv(SOCKET s, char *buf, int len, int flags) -{ - StartSockets(); - return xcerecv(s, buf, len, flags); -} - -int -win32_recvfrom(SOCKET s, char *buf, int len, int flags, - struct sockaddr *from, int *fromlen) -{ - StartSockets(); - return xcerecvfrom(s, buf, len, flags, from, fromlen); -} - -int -win32_select(int nfds, Perl_fd_set* rd, Perl_fd_set* wr, - Perl_fd_set* ex, const struct timeval* timeout) -{ - StartSockets(); - /* select not yet fixed */ - errno = ENOSYS; - return -1; -} - -int -win32_send(SOCKET s, const char *buf, int len, int flags) -{ - StartSockets(); - return xcesend(s, buf, len, flags); -} - -int -win32_sendto(SOCKET s, const char *buf, int len, int flags, - const struct sockaddr *to, int tolen) -{ - StartSockets(); - return xcesendto(s, buf, len, flags, to, tolen); -} - -int -win32_setsockopt(SOCKET s, int level, int optname, - const char *optval, int optlen) -{ - StartSockets(); - return xcesetsockopt(s, level, optname, optval, optlen); -} - -int -win32_shutdown(SOCKET s, int how) -{ - StartSockets(); - return xceshutdown(s, how); -} - -int -win32_closesocket(SOCKET s) -{ - StartSockets(); - return xceclosesocket(s); -} - -struct hostent * -win32_gethostbyaddr(const char *addr, int len, int type) -{ - struct hostent *r; - - SOCKET_TEST(r = gethostbyaddr(addr, len, type), NULL); - return r; -} - -struct hostent * -win32_gethostbyname(const char *name) -{ - struct hostent *r; - - SOCKET_TEST(r = gethostbyname(name), NULL); - return r; -} - -int -win32_gethostname(char *name, int len) -{ - int r; - - SOCKET_TEST_ERROR(r = gethostname(name, len)); - return r; -} - -struct protoent * -win32_getprotobyname(const char *name) -{ - struct protoent *r; - - SOCKET_TEST(r = getprotobyname(name), NULL); - return r; -} - -struct protoent * -win32_getprotobynumber(int num) -{ - struct protoent *r; - - SOCKET_TEST(r = getprotobynumber(num), NULL); - return r; -} - -struct servent * -win32_getservbyname(const char *name, const char *proto) -{ - dTHX; - struct servent *r; - - SOCKET_TEST(r = getservbyname(name, proto), NULL); - if (r) { - r = win32_savecopyservent(&w32_servent, r, proto); - } - return r; -} - -struct servent * -win32_getservbyport(int port, const char *proto) -{ - dTHX; - struct servent *r; - - SOCKET_TEST(r = getservbyport(port, proto), NULL); - if (r) { - r = win32_savecopyservent(&w32_servent, r, proto); - } - return r; -} - -int -win32_ioctl(int i, unsigned int u, char *data) -{ - dTHX; - u_long argp = (u_long)data; - int retval; - - if (!wsock_started) { - Perl_croak_nocontext("ioctl implemented only on sockets"); - /* NOTREACHED */ - } - - retval = ioctlsocket(TO_SOCKET(i), (long)u, &argp); - if (retval == SOCKET_ERROR) { - if (WSAGetLastError() == WSAENOTSOCK) { - Perl_croak_nocontext("ioctl implemented only on sockets"); - /* NOTREACHED */ - } - errno = WSAGetLastError(); - } - return retval; -} - -char FAR * -win32_inet_ntoa(struct in_addr in) -{ - StartSockets(); - return inet_ntoa(in); -} - -unsigned long -win32_inet_addr(const char FAR *cp) -{ - StartSockets(); - return inet_addr(cp); -} - -/* - * Networking stubs - */ - -void -win32_endhostent() -{ - dTHX; - Perl_croak_nocontext("endhostent not implemented!\n"); -} - -void -win32_endnetent() -{ - dTHX; - Perl_croak_nocontext("endnetent not implemented!\n"); -} - -void -win32_endprotoent() -{ - dTHX; - Perl_croak_nocontext("endprotoent not implemented!\n"); -} - -void -win32_endservent() -{ - dTHX; - Perl_croak_nocontext("endservent not implemented!\n"); -} - - -struct netent * -win32_getnetent(void) -{ - dTHX; - Perl_croak_nocontext("getnetent not implemented!\n"); - return (struct netent *) NULL; -} - -struct netent * -win32_getnetbyname(char *name) -{ - dTHX; - Perl_croak_nocontext("getnetbyname not implemented!\n"); - return (struct netent *)NULL; -} - -struct netent * -win32_getnetbyaddr(long net, int type) -{ - dTHX; - Perl_croak_nocontext("getnetbyaddr not implemented!\n"); - return (struct netent *)NULL; -} - -struct protoent * -win32_getprotoent(void) -{ - dTHX; - Perl_croak_nocontext("getprotoent not implemented!\n"); - return (struct protoent *) NULL; -} - -struct servent * -win32_getservent(void) -{ - dTHX; - Perl_croak_nocontext("getservent not implemented!\n"); - return (struct servent *) NULL; -} - -void -win32_sethostent(int stayopen) -{ - dTHX; - Perl_croak_nocontext("sethostent not implemented!\n"); -} - - -void -win32_setnetent(int stayopen) -{ - dTHX; - Perl_croak_nocontext("setnetent not implemented!\n"); -} - - -void -win32_setprotoent(int stayopen) -{ - dTHX; - Perl_croak_nocontext("setprotoent not implemented!\n"); -} - - -void -win32_setservent(int stayopen) -{ - dTHX; - Perl_croak_nocontext("setservent not implemented!\n"); -} - -static struct servent* -win32_savecopyservent(struct servent*d, struct servent*s, const char *proto) -{ - d->s_name = s->s_name; - d->s_aliases = s->s_aliases; - d->s_port = s->s_port; -#ifndef __BORLANDC__ /* Buggy on Win95 and WinNT-with-Borland-WSOCK */ - if (!IsWin95() && s->s_proto && strlen(s->s_proto)) - d->s_proto = s->s_proto; - else -#endif - if (proto && strlen(proto)) - d->s_proto = (char *)proto; - else - d->s_proto = "tcp"; - - return d; -} |