Merge WinCE and Win32 directories -- Initial patch
authorYves Orton <demerphq@gmail.com>
Thu, 27 Apr 2006 23:30:00 +0000 (23:30 +0000)
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Fri, 28 Apr 2006 15:29:30 +0000 (15:29 +0000)
Message-ID: <9b18b3110604271430k4de84685jec6535ded195ed94@mail.gmail.com>

p4raw-id: //depot/perl@28003

win32/config_h.PL
win32/dl_win32.xs
win32/include/sys/socket.h
win32/makeico.pl
win32/perlhost.h
win32/perllib.c
win32/vdir.h
win32/vmem.h
win32/win32.h

index 957966c59fa9d8a25cd533419685353ae741374b..ad2c9a3afa47bc532c06ff81c8f685726e4456e4 100644 (file)
@@ -2,8 +2,8 @@
 BEGIN { warn "Running ".__FILE__."\n" };
 BEGIN 
  {
-  require "../lib/Config.pm";
-  die "../Config.pm:$@" if $@;
+  require "Config.pm";
+  die "Config.pm:$@" if $@;
   Config::->import;
  }
 use File::Compare qw(compare);
@@ -18,6 +18,7 @@ while (@ARGV && $ARGV[0] =~ /^([\w_]+)=(.*)$/)
  }
 
 $opt{CONFIG_H} ||= 'config.h';
+$opt{CORE_DIR} ||= '../lib/CORE';
 
 warn "Writing $opt{CONFIG_H}\n";
 
@@ -76,9 +77,9 @@ close(H);
 close(SH);
 
 
-chmod(0666,"../lib/CORE/config.h");
-copy("$file.new","../lib/CORE/config.h") || die "Cannot copy:$!";
-chmod(0444,"../lib/CORE/config.h");
+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))
  {
index b69ad27c7b64a40e0a33f7ee14d02cfb748318a5..6c094d22fd4f0054a8bcdec1a1947b63aaf66da4 100644 (file)
@@ -119,7 +119,7 @@ dl_load_file(filename,flags=0)
        RETVAL = PerlProc_DynaLoad(filename);
     }
     else
-       RETVAL = (void*) GetModuleHandle(NULL);
+       RETVAL = (void*) Win_GetModuleHandle(NULL);
     DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", RETVAL));
     ST(0) = sv_newmortal() ;
     if (RETVAL == NULL)
index d2ef6e7752c42063d0e79af280a339827a4002cf..e13e872fe1082da6c15b9dd0a52319b64d48d280 100644 (file)
 extern "C" {
 #endif
 
+#ifndef   _WINCE
+
 #define WIN32_LEAN_AND_MEAN
 #ifdef __GNUC__
 #  define Win32_Winsock
 #endif
 #include <windows.h>
 
+#else
+/*_WINCE*/
+#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
+
+#undef   HOST_NOT_FOUND
+
+#endif  /*_WINCE*/
+
 /* Too late to include winsock2.h if winsock.h has already been loaded */
 #ifndef _WINSOCKAPI_
 #  include <winsock2.h>
index 2585cf0d6819ff38f4bae8becff8c5fc1923f309..12685f9ef6d5c39c7f0074b06f428830a5c22552 100644 (file)
@@ -1,7 +1,12 @@
-binmode STDOUT;
+if (@ARGV) {
+    open ICO, ">", shift or die $!;
+} else {
+    *ICO= *STDOUT;
+}
+binmode ICO;
 while (<DATA>) {
   chomp;
-  print pack "H*", $_;
+  print ICO pack "H*", $_;
 }
 
 # Create new hex data with
@@ -98,3 +103,4 @@ ff00ffffff00060606060606060606060606060606060606060606060606060d
 0000000000000000000000000000ffff9e5cfbb77420fd9b7865fd9b2074fd5b
 7320fd5b6e20fd137573f0017072e0036c65e0032077e4076e20e6076577c30f
 6720ff9f6520ffff6f6effff6e20
+
index ff90ca90da7319d9c901de031a0c173f62a10890..fe026dde1f81efc8de8afbae224473436f7e272f 100644 (file)
@@ -7,12 +7,16 @@
  *    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"
@@ -823,6 +827,7 @@ PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum)
 FILE*
 PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf)
 {
+#ifndef UNDER_CE
     FILE* pfdup;
     fpos_t pos;
     char mode[3];
@@ -870,6 +875,9 @@ PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf)
        fsetpos(pfdup, &pos);
     }
     return pfdup;
+#else
+    return 0;
+#endif
 }
 
 struct IPerlStdIO perlStdIO =
@@ -2132,6 +2140,10 @@ lookup(const void *arg1, const void *arg2)
 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);
index 3acfca120433675edbfaf3a2e6423e91d3d07202..5ce8fe7694593173f696abff13b571efa561b4c5 100644 (file)
@@ -40,6 +40,9 @@ xs_init(pTHX)
 
 #ifdef PERL_IMPLICIT_SYS
 
+/* WINCE: include replaced by:
+extern "C" void win32_checkTLS(PerlInterpreter *host_perl);
+*/
 #include "perlhost.h"
 
 void
@@ -48,11 +51,45 @@ win32_checkTLS(PerlInterpreter *host_perl)
     dTHX;
     if (host_perl != my_perl) {
        int *nowhere = NULL;
-        *nowhere = 0; 
+#ifdef _WIN_CE
+       printf(" ... bad in win32_checkTLS\n");
+       printf("  %08X ne %08X\n",host_perl,my_perl);
+#endif
        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
+
+/* WINCE??: include "perlhost.h" */
+
 EXTERN_C void
 perl_get_host_info(struct IPerlMemInfo* perlMemInfo,
                   struct IPerlMemInfo* perlMemSharedInfo,
@@ -177,7 +214,7 @@ RunPerl(int argc, char **argv, char **env)
      * Borland's CRT does the right thing to argv[0] already. */
     char szModuleName[MAX_PATH];
 
-    GetModuleFileName(NULL, szModuleName, sizeof(szModuleName));
+    Win_GetModuleFileName(NULL, szModuleName, sizeof(szModuleName));
     (void)win32_longpath(szModuleName);
     argv[0] = szModuleName;
 #endif
@@ -254,7 +291,11 @@ DllMain(HANDLE hModule,            /* DLL module handle */
        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;
@@ -290,6 +331,7 @@ DllMain(HANDLE hModule,             /* DLL module handle */
     return TRUE;
 }
 
+
 #if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
 EXTERN_C PerlInterpreter *
 perl_clone_host(PerlInterpreter* proto_perl, UV flags) {
index 2dd7e34cc6f8c9c6c628e697952bac74ed86de97..10119ead9ed84fb13d03260e00d6b9d1533abf42 100644 (file)
@@ -150,7 +150,7 @@ void VDir::Init(VDir* pDir, VMem *p)
        bManageDirectory = 0;
        driveBits = GetLogicalDrives();
        if (GetLogicalDriveStrings(sizeof(szBuffer), szBuffer)) {
-           char* pEnv = GetEnvironmentStrings();
+           char* pEnv = (char*)GetEnvironmentStrings();
            char* ptr = szBuffer;
            for (index = 0; index < driveCount; ++index) {
                if (driveBits & (1<<index)) {
index 31aa07e3a4a172aaa1d0c794238d9c12247a7757..1373121f115a143e8819c27f983096c93523eb85 100644 (file)
@@ -21,7 +21,9 @@
 #ifndef ___VMEM_H_INC___
 #define ___VMEM_H_INC___
 
+#ifndef _WIN_CE
 #define _USE_MSVCRT_MEM_ALLOC
+#endif
 #define _USE_LINKED_LIST
 
 // #define _USE_BUDDY_BLOCKS
index 7be8482ce4d9031685cc314b9ef8a974a1489e8e..60309491d03d688223ffaa15104dc8871d47c54c 100644 (file)
@@ -563,5 +563,17 @@ EXTERN_C _CRTIMP ioinfo* __pioinfo[];
 DllExport void *win32_signal_context(void);
 #define PERL_GET_SIG_CONTEXT win32_signal_context()
 
+#ifdef _WIN_CE
+#define Win_GetModuleHandle   XCEGetModuleHandleA
+#define Win_GetProcAddress    XCEGetProcAddressA
+#define Win_GetModuleFileName XCEGetModuleFileNameA
+#define Win_CreateSemaphore   CreateSemaphoreW
+#else
+#define Win_GetModuleHandle   GetModuleHandle
+#define Win_GetProcAddress    GetProcAddress
+#define Win_GetModuleFileName GetModuleFileName
+#define Win_CreateSemaphore   CreateSemaphore
+#endif
+
 #endif /* _INC_WIN32_PERL5 */