1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

WinCE patch merged

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2002-12-02 07:57:17 +00:00
parent e193fd8d66
commit 90c4dae08f
48 changed files with 5461 additions and 68 deletions

View file

@ -808,6 +808,8 @@ if test "$with_dln_a_out" != yes; then
DLDFLAGS="${DLDFLAGS} "'$(DEFFILE)'
rb_cv_dlopen=yes ;;
hiuxmpp) LDSHARED='ld -r' ;;
atheos*) LDSHARED="$CC -shared"
rb_cv_dlopen=yes ;;
*) LDSHARED='ld' ;;
esac
AC_MSG_RESULT($rb_cv_dlopen)
@ -955,9 +957,6 @@ rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no
*djgpp*)
setup=Setup.dj
;;
atheos*)
setup=Setup.atheos
;;
*)
setup=Setup
;;
@ -1085,6 +1084,10 @@ if test "$enable_shared" = 'yes'; then
LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib'
;;
atheos*)
LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
;;
*)
;;
esac

View file

@ -88,7 +88,7 @@ void xfree _((void*));
/* define RUBY_USE_EUC/SJIS for default kanji-code */
#ifndef DEFAULT_KCODE
#if defined(MSDOS) || defined(__CYGWIN__) || defined(__human68k__) || defined(__MACOS__) || defined(__EMX__) || defined(OS2) || defined(NT)
#if defined(MSDOS) || defined(__CYGWIN__) || defined(__human68k__) || defined(__MACOS__) || defined(__EMX__) || defined(OS2) || defined(NT) || defined(_WIN32_WCE)
#define DEFAULT_KCODE KCODE_SJIS
#else
#define DEFAULT_KCODE KCODE_EUC
@ -106,7 +106,7 @@ void xfree _((void*));
#define HAVE_SYS_WAIT_H /* configure fails to find this */
#endif /* NeXT */
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
#include "win32/win32.h"
#endif
@ -141,7 +141,7 @@ void xfree _((void*));
#define DOSISH 1
#endif
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(OS2)
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(OS2) || defined(_WIN32_WCE)
#define PATH_SEP ";"
#elif defined(riscos)
#define PATH_SEP ","

12
dir.c
View file

@ -21,10 +21,10 @@
#include <unistd.h>
#endif
#if defined HAVE_DIRENT_H && !defined NT
#if defined HAVE_DIRENT_H && !defined NT && !defined _WIN32_WCE
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
#elif defined HAVE_DIRECT_H && !defined NT
#elif defined HAVE_DIRECT_H && !defined NT && !defined _WIN32_WCE
# include <direct.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
@ -39,7 +39,7 @@
# if HAVE_NDIR_H
# include <ndir.h>
# endif
# if defined(NT)
# if defined(NT) || defined(_WIN32_WCE)
# include "win32/dir.h"
# endif
#endif
@ -79,6 +79,10 @@ char *strchr _((char*,char));
# define CharNext(p) ((p) + 1)
# endif
#endif
#ifdef _WIN32_WCE
#undef CharNext
#define CharNext CharNextA
#endif
#if defined DOSISH
#define isdirsep(c) ((c) == '/' || (c) == '\\')
static char *
@ -534,7 +538,7 @@ dir_s_mkdir(argc, argv, obj)
SafeStringValue(path);
rb_secure(2);
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
if (mkdir(RSTRING(path)->ptr, mode) == -1)
rb_sys_fail(RSTRING(path)->ptr);
#else

25
dln.c
View file

@ -48,7 +48,7 @@ void *xrealloc();
#endif
#include <stdio.h>
#if defined(NT) || defined(__VMS)
#if defined(NT) || defined(__VMS) || defined(_WIN32_WCE)
#include "missing/file.h"
#endif
#include <sys/types.h>
@ -69,7 +69,7 @@ void *xrealloc();
# include <unistd.h>
#endif
#ifndef NT
#if !defined(NT) && !defined(_WIN32_WCE)
char *getenv();
#endif
@ -1149,6 +1149,15 @@ dln_sym(name)
#include <windows.h>
#endif
#ifdef _WIN32_WCE
#undef FormatMessage
#define FormatMessage FormatMessageA
#undef LoadLibrary
#define LoadLibrary LoadLibraryA
#undef GetProcAddress
#define GetProcAddress GetProcAddressA
#endif
static const char *
dln_strerror()
{
@ -1589,7 +1598,7 @@ dln_find_exe(fname, path)
}
if (!path) {
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__MACOS__)
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__MACOS__) || defined(_WIN32_WCE)
path = "/usr/local/bin;/usr/ucb;/usr/bin;/bin;.";
#else
path = "/usr/local/bin:/usr/ucb:/usr/bin:/bin:.";
@ -1660,7 +1669,7 @@ dln_find_1(fname, path, exe_flag)
if (strncmp("./", fname, 2) == 0 || strncmp("../", fname, 3) == 0)
return fname;
if (exe_flag && strchr(fname, '/')) return fname;
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__EMX__)
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__EMX__) || defined(_WIN32_WCE)
if (fname[0] == '\\') return fname;
if (strlen(fname) > 2 && fname[1] == ':') return fname;
if (strncmp(".\\", fname, 2) == 0 || strncmp("..\\", fname, 3) == 0)
@ -1692,7 +1701,7 @@ dln_find_1(fname, path, exe_flag)
*/
if (*dp == '~' && (l == 1 ||
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__EMX__)
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__EMX__) || defined(_WIN32_WCE)
dp[1] == '\\' ||
#endif
dp[1] == '/')) {
@ -1750,7 +1759,7 @@ dln_find_1(fname, path, exe_flag)
}
}
#endif
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__EMX__)
#if defined(MSDOS) || defined(NT) || defined(__human68k__) || defined(__EMX__) || defined(_WIN32_WCE)
if (exe_flag) {
static const char *extension[] = {
#if defined(MSDOS)
@ -1758,9 +1767,9 @@ dln_find_1(fname, path, exe_flag)
#if defined(DJGPP)
".btm", ".sh", ".ksh", ".pl", ".sed",
#endif
#elif defined(__EMX__) || defined(NT)
#elif defined(__EMX__) || defined(NT) || defined(_WIN32_WCE)
".exe", ".com", ".cmd", ".bat",
/* end of __EMX__ or NT*/
/* end of __EMX__ or NT or WINCE */
#else
".r", ".R", ".x", ".X", ".bat", ".BAT",
/* __human68k__ */

View file

@ -645,7 +645,7 @@ void
rb_sys_fail(mesg)
const char *mesg;
{
#if !defined(NT) && !defined(__VMS)
#if !defined(NT) && !defined(__VMS) && !defined(_WIN32_WCE)
char *strerror();
#endif
char *err;

2
eval.c
View file

@ -7328,7 +7328,7 @@ win32_set_exception_list(p)
# endif
}
#ifndef SAVE_WIN32_EXCEPTION_LIST
#if !defined SAVE_WIN32_EXCEPTION_LIST && !defined _WIN32_WCE
# error unsupported platform
#endif
#endif

25
file.c
View file

@ -12,7 +12,7 @@
**********************************************************************/
#ifdef NT
#if defined NT || defined _WIN32_WCE
#include "missing/file.h"
#endif
@ -43,12 +43,12 @@ int flock _((int, int));
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#else
#ifndef NT
#if !defined(NT) && !defined(_WIN32_WCE)
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
#endif /* NT */
#endif /* NT, WINCE */
#endif
VALUE rb_time_new _((time_t, time_t));
@ -76,6 +76,11 @@ char *strrchr _((const char*,const char));
#define lstat(path,st) stat(path,st)
#endif
#ifdef _WIN32_WCE
#undef CharNext
#define CharNext CharNextA
#endif
VALUE rb_cFile;
VALUE rb_mFileTest;
static VALUE rb_cStat;
@ -110,7 +115,7 @@ rb_file_path(obj)
return rb_str_new2(fptr->path);
}
#ifdef NT
#if defined NT || defined _WIN32_WCE
#include "missing/file.h"
#endif
@ -440,7 +445,7 @@ static int
group_member(gid)
GETGROUPS_T gid;
{
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
if (getgid() == gid)
return Qtrue;
@ -780,7 +785,7 @@ static VALUE
test_grpowned(obj, fname)
VALUE obj, fname;
{
#ifndef NT
#if !defined(NT) && !defined(_WIN32_WCE)
struct stat st;
if (rb_stat(fname, &st) < 0) return Qfalse;
@ -1115,7 +1120,7 @@ rb_file_chown(obj, owner, group)
rb_secure(2);
GetOpenFile(obj, fptr);
#if defined(DJGPP) || defined(__CYGWIN32__) || defined(NT) || defined(__EMX__)
#if defined(DJGPP) || defined(__CYGWIN32__) || defined(NT) || defined(__EMX__) || defined(_WIN32_WCE)
if (!fptr->path) return Qnil;
if (chown(fptr->path, NUM2INT(owner), NUM2INT(group)) == -1)
rb_sys_fail(fptr->path);
@ -1208,7 +1213,7 @@ rb_file_s_utime(argc, argv)
#else
#ifndef HAVE_UTIME_H
# ifdef NT
# if defined NT || defined _WIN32_WCE
# if defined(__BORLANDC__)
# include <utime.h>
# else
@ -1711,7 +1716,7 @@ rb_file_s_truncate(klass, path, len)
{
int tmpfd;
# if defined(NT)
# if defined(NT) || defined(_WIN32_WCE)
if ((tmpfd = open(RSTRING(path)->ptr, O_RDWR)) < 0) {
rb_sys_fail(RSTRING(path)->ptr);
}
@ -2136,7 +2141,7 @@ static VALUE
rb_stat_grpowned(obj)
VALUE obj;
{
#ifndef NT
#if !defined(NT) && !defined(_WIN32_WCE)
if (get_stat(obj)->st_gid == getegid()) return Qtrue;
#endif
return Qfalse;

2
hash.c
View file

@ -942,7 +942,7 @@ rb_hash_update(hash1, hash2)
static int path_tainted = -1;
static char **origenviron;
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
#define GET_ENVIRON(e) (e = rb_w32_get_environ())
#define FREE_ENVIRON(e) rb_w32_free_environ(e)
static char **my_environ;

18
io.c
View file

@ -24,7 +24,7 @@
#include <ctype.h>
#include <errno.h>
#if defined(MSDOS) || defined(__BOW__) || defined(__CYGWIN__) || defined(NT) || defined(__human68k__) || defined(__EMX__) || defined(__BEOS__)
#if defined(MSDOS) || defined(__BOW__) || defined(__CYGWIN__) || defined(NT) || defined(__human68k__) || defined(__EMX__) || defined(__BEOS__) || defined(_WIN32_WCE)
# define NO_SAFE_RENAME
#endif
@ -41,10 +41,10 @@
#endif
#include <sys/types.h>
#if !defined(DJGPP) && !defined(NT) && !defined(__human68k__)
#if !defined(DJGPP) && !defined(NT) && !defined(__human68k__) && !defined(_WIN32_WCE)
#include <sys/ioctl.h>
#endif
#if defined(HAVE_FCNTL_H) || defined(NT)
#if defined(HAVE_FCNTL_H) || defined(NT) || defined(_WIN32_WCE)
#include <fcntl.h>
#elif defined(HAVE_SYS_FCNTL_H)
#include <sys/fcntl.h>
@ -1536,7 +1536,7 @@ VALUE
rb_io_binmode(io)
VALUE io;
{
#if defined(NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__EMX__)
#if defined(NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__EMX__) || defined(_WIN32_WCE)
OpenFile *fptr;
GetOpenFile(io, fptr);
@ -1825,7 +1825,7 @@ rb_file_sysopen(fname, flags, mode)
return rb_file_sysopen_internal(io, fname, flags, mode);
}
#if defined (NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__VMS)
#if defined (NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__VMS) || defined(_WIN32_WCE)
static struct pipe_list {
OpenFile *fptr;
struct pipe_list *next;
@ -1867,7 +1867,7 @@ pipe_del_fptr(fptr)
}
}
#if defined (NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__VMS)
#if defined (NT) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__VMS) || defined(_WIN32_WCE)
static void
pipe_atexit _((void))
{
@ -1888,7 +1888,7 @@ static void
pipe_finalize(fptr)
OpenFile *fptr;
{
#if !defined (__CYGWIN__) && !defined(NT)
#if !defined (__CYGWIN__) && !defined(NT) && !defined(_WIN32_WCE)
extern VALUE rb_last_status;
int status;
if (fptr->f) {
@ -1951,7 +1951,7 @@ pipe_open(pname, mode)
return (VALUE)port;
}
#else
#if defined(NT)
#if defined(NT) || defined(_WIN32_WCE)
int pid;
FILE *fpr, *fpw;
@ -3469,7 +3469,7 @@ rb_io_s_pipe()
int pipes[2];
VALUE r, w;
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
if (_pipe(pipes, 1024, O_BINARY) == -1)
#else
if (pipe(pipes) == -1)

2
main.c
View file

@ -38,7 +38,7 @@ main(argc, argv, envp)
int argc;
char **argv, **envp;
{
#if defined(NT)
#if defined(NT) || defined(_WIN32_WCE)
NtInitialize(&argc, &argv);
#endif
#if defined(__MACOS__) && defined(__MWERKS__)

View file

@ -14,7 +14,7 @@
#if defined(HAVE_SYS_TIME_H)
# include <sys/time.h>
#elif !defined(NT)
#elif !defined(NT) && !defined(_WIN32_WCE)
# define time_t long
struct timeval {
time_t tv_sec; /* seconds */

View file

@ -42,7 +42,7 @@ struct timeval rb_time_interval _((VALUE));
#include <sys/times.h>
#endif
#if defined(HAVE_TIMES) || defined(NT)
#if defined(HAVE_TIMES) || defined(NT) || defined(_WIN32_WCE)
static VALUE S_Tms;
#endif
@ -74,7 +74,7 @@ get_pid()
static VALUE
get_ppid()
{
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
return INT2FIX(0);
#else
return INT2FIX(getppid());
@ -703,7 +703,7 @@ static VALUE
rb_f_fork(obj)
VALUE obj;
{
#if !defined(__human68k__) && !defined(NT) && !defined(__MACOS__) && !defined(__EMX__) && !defined(__VMS)
#if !defined(__human68k__) && !defined(NT) && !defined(__MACOS__) && !defined(__EMX__) && !defined(__VMS) && !defined(_WIN32_WCE)
int pid;
rb_secure(2);
@ -796,7 +796,7 @@ rb_f_system(argc, argv)
int argc;
VALUE *argv;
{
#if defined(NT) || defined(__EMX__)
#if defined(NT) || defined(__EMX__) || defined(_WIN32_WCE)
VALUE cmd;
int status;
@ -1286,7 +1286,7 @@ Init_process()
rb_mProcess = rb_define_module("Process");
#if !defined(NT) && !defined(DJGPP)
#if !defined(NT) && !defined(DJGPP) && !defined(_WIN32_WCE)
#ifdef WNOHANG
rb_define_const(rb_mProcess, "WNOHANG", INT2FIX(WNOHANG));
#else
@ -1358,7 +1358,7 @@ Init_process()
rb_define_module_function(rb_mProcess, "times", rb_proc_times, 0);
#if defined(HAVE_TIMES) || defined(NT)
#if defined(HAVE_TIMES) || defined(NT) || defined(_WIN32_WCE)
S_Tms = rb_struct_define("Tms", "utime", "stime", "cutime", "cstime", 0);
#endif
}

View file

@ -13,7 +13,7 @@
#ifndef SIG_H
#define SIG_H
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
typedef LONG rb_atomic_t;
# define ATOMIC_TEST(var) InterlockedExchange(&(var), 0)

View file

@ -369,7 +369,7 @@ static RETSIGTYPE
sighandler(sig)
int sig;
{
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
#define IN_MAIN_CONTEXT(f, a) (rb_w32_main_context(a, f) ? (void)0 : f(a))
#else
#define IN_MAIN_CONTEXT(f, a) f(a)
@ -453,7 +453,7 @@ rb_trap_exec()
}
struct trap_arg {
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
# ifdef HAVE_SIGPROCMASK
sigset_t mask;
# else
@ -594,7 +594,7 @@ trap(arg)
trap_list[sig] = command;
/* enable at least specified signal. */
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
#ifdef HAVE_SIGPROCMASK
sigdelset(&arg->mask, sig);
#else
@ -604,7 +604,7 @@ trap(arg)
return old;
}
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
static VALUE
trap_ensure(arg)
struct trap_arg *arg;
@ -623,7 +623,7 @@ trap_ensure(arg)
void
rb_trap_restore_mask()
{
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
# ifdef HAVE_SIGPROCMASK
sigprocmask(SIG_SETMASK, &trap_last_mask, NULL);
# else
@ -655,7 +655,7 @@ sig_trap(argc, argv)
if (OBJ_TAINTED(arg.cmd)) {
rb_raise(rb_eSecurityError, "Insecure: tainted signal trap");
}
#if !defined(NT)
#if !defined(NT) && !defined(_WIN32_WCE)
/* disable interrupt */
# ifdef HAVE_SIGPROCMASK
sigfillset(&arg.mask);

2
st.c
View file

@ -7,7 +7,7 @@
#include <stdlib.h>
#include "st.h"
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
#include <malloc.h>
#endif

10
util.c
View file

@ -16,7 +16,7 @@
#include <stdio.h>
#include <errno.h>
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
#include "missing/file.h"
#endif
@ -75,11 +75,11 @@ scan_hex(start, len, retlen)
# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
#endif
#ifdef NT
#if defined(NT) || defined(_WIN32_WCE)
#include "missing/file.h"
#endif
#if defined(MSDOS) || defined(__CYGWIN32__) || defined(NT)
#if defined(MSDOS) || defined(__CYGWIN32__) || defined(NT) || defined(_WIN32_WCE)
/*
* Copyright (c) 1993, Intergraph Corporation
*
@ -173,7 +173,7 @@ ruby_add_suffix(str, suffix)
rb_fatal("Cannot do inplace edit on long filename (%ld characters)",
RSTRING(str)->len);
#if defined(DJGPP) || defined(__CYGWIN32__) || defined(NT)
#if defined(DJGPP) || defined(__CYGWIN32__) || defined(NT) || defined(_WIN32_WCE)
/* Style 0 */
slen = RSTRING(str)->len;
rb_str_cat(str, suffix, extlen);
@ -229,7 +229,7 @@ fallback:
memcpy(RSTRING(str)->ptr, buf, RSTRING(str)->len);
}
#if defined(__CYGWIN32__) || defined(NT)
#if defined(__CYGWIN32__) || defined(NT) || defined(_WIN32_WCE)
static int
valid_filename(char *s)
{

2
util.h
View file

@ -39,7 +39,7 @@ unsigned long scan_oct _((const char*, int, int*));
#define scan_hex ruby_scan_hex
unsigned long scan_hex _((const char*, int, int*));
#if defined(MSDOS) || defined(__CYGWIN32__) || defined(NT)
#if defined(MSDOS) || defined(__CYGWIN32__) || defined(NT) || defined(_WIN32_WCE)
void ruby_add_suffix();
#define add_suffix ruby_add_suffix
#endif

View file

@ -29,6 +29,9 @@
#endif
#include "win32.h"
#include "win32/dir.h"
#ifdef _WIN32_WCE
#include "wince.h"
#endif
#ifndef index
#define index(x, y) strchr((x), (y))
#endif
@ -49,7 +52,7 @@
# undef WIN95
#endif
#ifdef __BORLANDC__
#if defined __BORLANDC__ || defined _WIN32_WCE
# define _filbuf _fgetc
# define _flsbuf _fputc
# define enough_to_get(n) (--(n) >= 0)
@ -91,7 +94,7 @@ static int valid_filename(char *s);
static void StartSockets ();
static char *str_grow(struct RString *str, size_t new_size);
static DWORD wait_events(HANDLE event, DWORD timeout);
#ifndef __BORLANDC__
#if !defined(__BORLANDC__) && !defined(_WIN32_WCE)
static int rb_w32_open_osfhandle(long osfhandle, int flags);
#else
#define rb_w32_open_osfhandle(osfhandle, flags) _open_osfhandle(osfhandle, flags)
@ -287,6 +290,11 @@ NtInitialize(int *argc, char ***argv)
// Initialize Winsock
StartSockets();
#ifdef _WIN32_WCE
// free commandline buffer
wce_FreeCommandLine();
#endif
}
char *getlogin()
@ -1387,7 +1395,7 @@ typedef struct {
#define _CRTIMP __declspec(dllimport)
#endif
#ifndef __BORLANDC__
#if !defined(__BORLANDC__) && !defined(_WIN32_WCE)
EXTERN_C _CRTIMP ioinfo * __pioinfo[];
#define IOINFO_L2E 5
@ -2707,8 +2715,10 @@ static void setup_call(CONTEXT* ctx, struct handler_arg_t *harg)
ctx->Esp = (DWORD)esp;
ctx->Eip = (DWORD)rb_w32_call_handler;
#else
#ifndef _WIN32_WCE
#error unsupported processor
#endif
#endif
}
int rb_w32_main_context(int arg, void (*handler)(int))
@ -2792,13 +2802,16 @@ static void catch_interrupt(void)
int rb_w32_getc(FILE* stream)
{
int c, trap_immediate = rb_trap_immediate;
#ifndef _WIN32_WCE
if (enough_to_get(stream->FILE_COUNT)) {
c = (unsigned char)*stream->FILE_READPTR++;
rb_trap_immediate = trap_immediate;
}
else {
else
#endif
{
c = _filbuf(stream);
#ifdef __BORLANDC__
#if defined __BORLANDC__ || defined _WIN32_WCE
if( ( c == EOF )&&( errno == EPIPE ) )
{
clearerr(stream);
@ -2814,11 +2827,14 @@ int rb_w32_getc(FILE* stream)
int rb_w32_putc(int c, FILE* stream)
{
int trap_immediate = rb_trap_immediate;
#ifndef _WIN32_WCE
if (enough_to_put(stream->FILE_COUNT)) {
c = (unsigned char)(*stream->FILE_READPTR++ = (char)c);
rb_trap_immediate = trap_immediate;
}
else {
else
#endif
{
c = _flsbuf(c, stream);
rb_trap_immediate = trap_immediate;
catch_interrupt();

62
wince/README.wince Normal file
View file

@ -0,0 +1,62 @@
=begin
= How to build ruby using eMbedded Visual C++
== Requirement
(1) eMbedded Visual C++ 3.0 or later.
== How to compile and install
(1) Move to ruby\wince directory.
(2) if you changed install directories of eMVC and SDK from default
settings, please modify .\configure.bat in order to set
environment valuables such as "PATH", "INCLUDE", and "LIB".
(2) Execute .\configure.bat on "ruby\wince" directory.
You can specify the target platform as an argument.
For example, run:
[CPU] [OS ver.]
StrongARM HPC2000 : `configure ARM HPC2K'
MIPS PocketPC : `configure MIPS PPC'
SH3 PocketPC : `configure SH3 PPC'
SH4 HPCPro : `configure SH4 HPCPRO'
(caution: "HPCPro" is not supported yet.)
(3) Execute `.\make.bat'.
(4) Copy mswince-ruby17.dll, ruby.exe, and irb.exe to your WinCE machine.
== Icons
Any icon files(*.ico) in the build directory, directories specified with
((|icondirs|)) make variable and (({win32})) directory under the ruby
source directory will be included in DLL or executable files, according
to their base names.
$(RUBY_INSTALL_NAME).ico or ruby.ico --> $(RUBY_INSTALL_NAME).exe
$(RUBYW_INSTALL_NAME).ico or rubyw.ico --> $(RUBYW_INSTALL_NAME).exe
the others --> $(RUBY_SO_NAME).dll
Although no icons are distributed with the ruby source or in the official
site, you can use anything you like. For example, followings are written
in Japanese, but you can download at least.
* ((<URL:http://member.nifty.ne.jp/ueivu/rubyico.html>)) or
((<zipped icons|URL:http://member.nifty.ne.jp/ueivu/Ruby_ico.zip>))
* ((<URL:http://homepage1.nifty.com/a_nakata/ruby/>)) or
((<icon itself|URL:http://homepage1.nifty.com/a_nakata/ruby/RubyIcon.ico>))
== Build examples
ex.)
current directory: C:\
ruby source directory: C:\ruby
target CPU: StrongARM
target OS version: PocketPC
cd \ruby\wince
.\configure ARM PPC
.\make.bat
=end

4
wince/assert.h Normal file
View file

@ -0,0 +1,4 @@
#ifndef _ASSERT_H_
#define _ASSERT_H_
#endif

141
wince/config Normal file
View file

@ -0,0 +1,141 @@
/* config.h */
/* based on mswin32's. */
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_OFF_T 1
#define SIZEOF_INT 4
#define SIZEOF_SHORT 2
#define SIZEOF_LONG 4
#define SIZEOF_LONG_LONG 0
#define SIZEOF___INT64 8
#define SIZEOF_OFF_T 4
#define SIZEOF_VOIDP 4
#define SIZEOF_FLOAT 4
#define SIZEOF_DOUBLE 8
#define HAVE_PROTOTYPES 1
#define TOKEN_PASTE(x,y) x##y
#define HAVE_STDARG_PROTOTYPES 1
#if _MSC_VER > 1100 && !defined NORETURN
#define NORETURN(x) __declspec(noreturn) x
#else
#define NORETURN(x) x
#endif
#define HAVE_DECL_SYS_NERR 1
#define STDC_HEADERS 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_LIMITS_H 1
#define HAVE_FCNTL_H 1
#define HAVE_SYS_UTIME_H 1
#define HAVE_MEMORY_H 1
#define uid_t int
#define gid_t int
#define HAVE_STRUCT_STAT_ST_RDEV 1
#define HAVE_ST_RDEV 1
#define GETGROUPS_T int
#define RETSIGTYPE void
#define HAVE_ALLOCA 1
#define HAVE_DUP2 1
#define HAVE_MEMCMP 1
#define HAVE_MEMMOVE 1
#define HAVE_MKDIR 1
#define HAVE_STRCASECMP 1
#define HAVE_STRNCASECMP 1
#define HAVE_STRERROR 1
#define HAVE_STRFTIME 1
#define HAVE_STRCHR 1
#define HAVE_STRSTR 1
#define HAVE_STRTOD 1
#define HAVE_STRTOL 1
#define HAVE_STRTOUL 1
#define HAVE_FLOCK 1
#define HAVE_VSNPRINTF 1
#define HAVE_FINITE 1
#define HAVE_FMOD 1
#define HAVE_FREXP 1
#define HAVE_HYPOT 1
#define HAVE_MODF 1
#define HAVE_WAITPID 1
#define HAVE_CHSIZE 1
#define HAVE_TIMES 1
#define HAVE__SETJMP 1
#define HAVE_TELLDIR 1
#define HAVE_SEEKDIR 1
#define HAVE_MKTIME 1
#define HAVE_COSH 1
#define HAVE_SINH 1
#define HAVE_TANH 1
#define HAVE_EXECVE 1
#define HAVE_TZNAME 1
#define HAVE_DAYLIGHT 1
#define SETPGRP_VOID 1
#define inline __inline
#define RSHIFT(x,y) ((x)>>(int)y)
/*#define FILE_COUNT _cnt*/
/*#define FILE_READPTR _ptr*/
#define DEFAULT_KCODE KCODE_NONE
#define DLEXT ".so"
#define DLEXT2 ".dll"
/*#define NT 1*/
#define RUBY_LIB "/lib/ruby/1.7"
#define RUBY_SITE_LIB "/lib/ruby/site_ruby"
#define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/1.7"
/*#define RUBY_PLATFORM "mips-mswince"*/
/*#define RUBY_ARCHLIB "/lib/ruby/1.7/mips-mswince"*/
/*#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/mips-mswince"*/
/* below wince's original definition. */
#define fdopen _fdopen
#define dup _dup
#define _dup2 dup2
#ifdef FormatMessage
#undef FormatMessage
#define FormatMessage FormatMessageA
#endif
#ifdef GetModuleFileName
#undef GetModuleFileName
#define GetModuleFileName GetModuleFileNameA
#endif
#ifdef CharNext
#undef CharNext
#define CharNext CharNextA
#endif
#ifdef CharPrev
#undef CharPrev
#define CharPrev CharPrevA
#endif
#ifdef LoadLibrary
#undef LoadLibrary
#define LoadLibrary LoadLibraryA
#endif
#ifdef GetProcAddress
#undef GetProcAddress
#define GetProcAddress GetProcAddressA
#endif
#if _WIN32_WCE < 300
/* for Handheld PC Pro. */
#define isascii(c) ( (c>=0x00&&c<=0x7f)?1:0 )
#define isspace(c) ( ((c>=0x09&&c<=0x0d)||c==0x20)?1:0 )
#define isdigit(c) ( (c>=0x00&&c<=0x09)?1:0 )
#define isupper(c) ( (c>='A'&&c<='Z')?1:0 )
#define isalpha(c) ( ((c>='A'&&c<='Z')||(c>='a'&&c<='z'))?1:0 )
#define isprint(c) ( (c>=0x20&&c<=0x7e)?1:0 )
#define isalnum(c) ( (isalpha(c)||isdigit(c))?1:0 )
#define iscntrl(c) ( ((c>=0x00&&c<=0x1f)||c==0x7f)?1:0 )
#define islower(c) ( (c>='a'&&c<='z')?1:0 )
#define ispunct(c) ( !(isalnum(c)||isspace(c))?1:0 )
#define isxdigit(c) ( ((c>=0&&c<=9)||(c>='A'&&c<='F')||(c>='a'&&c<='f'))?1:0 )
#endif

133
wince/configure.bat Normal file
View file

@ -0,0 +1,133 @@
@echo off
if "%1"=="" goto error
if "%2"=="" goto error
if exist make.bat @del make.bat
if "%1"=="MIPS" goto mips
if "%1"=="ARM" goto arm
if "%1"=="SH3" goto sh3
if "%1"=="SH4" goto sh4
:mips
copy config config.h
echo #define RUBY_PLATFORM "mips-mswince" >> config.h
echo #define RUBY_ARCHLIB "/lib/ruby/1.7/mips-mswince" >> config.h
echo #define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/mips-mswince" >> config.h
if "%2"=="HPC2K" goto mipshpc2k
if "%2"=="PPC" goto mipsppc
if "%2"=="HPCPRO" goto mipshpcpro
:mipshpc2k
echo nmake /f "dll.mak" CFG=MIPS >> make.bat
echo nmake /f "exe.mak" CFG=MIPS >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN
set include=c:\windows ce tools\wce300\hpc2000\include
set lib=C:\Windows CE Tools\wce300\hpc2000\lib\mips
goto normalend
:mipsppc
echo nmake /f "dll.mak" CFG=MIPS >> make.bat
echo nmake /f "exe.mak" CFG=MIPS >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN
set include=c:\windows ce tools\wce300\MS Pocket PC\include
set lib=c:\windows ce tools\wce300\MS Pocket PC\lib\mips
goto normalend
:mipshpcpro
echo nmake /f "dll.mak" CFG=MIPS CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
echo nmake /f "exe.mak" CFG=MIPS CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE211\BIN
set include=C:\Windows CE Tools\wce211\MS HPC Pro\include
set lib=C:\Windows CE Tools\wce211\MS HPC Pro\lib\mips
goto normalend
:arm
copy config config.h
echo #define RUBY_PLATFORM "arm-mswince" >> config.h
echo #define RUBY_ARCHLIB "/lib/ruby/1.7/arm-mswince" >> config.h
echo #define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/arm-mswince" >> config.h
if "%2"=="HPC2K" goto armhpc2k
if "%2"=="PPC" goto armppc
if "%2"=="HPCPRO" goto armhpcpro
:armhpc2k
echo nmake /f "dll.mak" CFG=ARM >> make.bat
echo nmake /f "exe.mak" CFG=ARM >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN
set include=c:\windows ce tools\wce300\hpc2000\include
set lib=C:\Windows CE Tools\wce300\hpc2000\lib\arm
goto normalend
:armppc
echo nmake /f "dll.mak" CFG=ARM >> make.bat
echo nmake /f "exe.mak" CFG=ARM >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN
set include=c:\windows ce tools\wce300\MS Pocket PC\include
set lib=c:\windows ce tools\wce300\MS Pocket PC\lib\arm
goto normalend
:armhpcpro
echo nmake /f "dll.mak" CFG=ARM CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
echo nmake /f "exe.mak" CFG=ARM CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE211\BIN
set include=C:\Windows CE Tools\wce211\MS HPC Pro\include
set lib=C:\Windows CE Tools\wce211\MS HPC Pro\lib\arm
goto normalend
:sh3
copy config config.h
echo #define RUBY_PLATFORM "sh3-mswince" >> config.h
echo #define RUBY_ARCHLIB "/lib/ruby/1.7/sh3-mswince" >> config.h
echo #define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/sh3-mswince" >> config.h
if "%2"=="HPC2K" goto error
if "%2"=="PPC" goto sh3ppc
if "%2"=="HPCPRO" goto sh3hpcpro
:sh3ppc
echo nmake /f "dll.mak" CFG=SH3 >> make.bat
echo nmake /f "exe.mak" CFG=SH3 >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN
set include=c:\windows ce tools\wce300\MS Pocket PC\include
set lib=c:\windows ce tools\wce300\MS Pocket PC\lib\sh3
goto normalend
:sh3hpcpro
echo nmake /f "dll.mak" CFG=SH3 CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
echo nmake /f "exe.mak" CFG=SH3 CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE211\BIN
set include=C:\Windows CE Tools\wce211\MS HPC Pro\include
set lib=C:\Windows CE Tools\wce211\MS HPC Pro\lib\sh3
goto normalend
:sh4
copy config config.h
echo #define RUBY_PLATFORM "sh4-mswince" >> config.h
echo #define RUBY_ARCHLIB "/lib/ruby/1.7/sh4-mswince" >> config.h
echo #define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.7/sh4-mswince" >> config.h
if "%2"=="HPC2K" goto error
if "%2"=="PPC" goto error
if "%2"=="HPCPRO" goto sh4hpcpro
:sh4hpcpro
echo nmake /f "dll.mak" CFG=SH4 CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
echo nmake /f "exe.mak" CFG=SH4 CESubsystem=windowsce,2.11 CEVersion=211 >> make.bat
set path=c:\program files\microsoft embedded tools\common\evc\bin;C:\Program Files\Microsoft eMbedded Tools\EVC\WCE211\BIN
set include=C:\Windows CE Tools\wce211\MS HPC Pro\include
set lib=C:\Windows CE Tools\wce211\MS HPC Pro\lib\sh4
goto normalend
:error
echo ERROR. Please check arguments.
goto end
:normalend
echo configure OK. Please type ".\make.bat".
goto end
:end

54
wince/direct.c Normal file
View file

@ -0,0 +1,54 @@
/***************************************************************
direct.c
***************************************************************/
#include <windows.h>
#include <tchar.h>
#include <direct.h>
#include "wince.h" /* for wce_mbtowc */
/* global for chdir, getcwd */
static char _currentdir[MAX_PATH+1];
char *_getcwd(char* buffer, int maxlen)
{
strcpy( buffer, _currentdir );
return buffer;
}
int _chdir(const char * dirname)
{
if( MAX_PATH < strlen(dirname) )
return -1;
strcpy( _currentdir, dirname );
return 0;
}
int _rmdir(const char * dir)
{
wchar_t *wdir;
BOOL rc;
/* replace with RemoveDirectory. */
wdir = wce_mbtowc(dir);
rc = RemoveDirectoryW(wdir);
free(wdir);
return rc==TRUE ? 0 : -1;
}
int _mkdir(const char * dir)
{
wchar_t* wdir;
BOOL rc;
/* replace with CreateDirectory. */
wdir = wce_mbtowc(dir);
rc = CreateDirectoryW(wdir, NULL);
free(wdir);
return rc==TRUE ? 0 : -1;
}

23
wince/direct.h Normal file
View file

@ -0,0 +1,23 @@
#ifndef DIRECT_H
#define DIRECT_H 1
#ifdef __cplusplus
extern "C" {
#endif
char *_getcwd(char* buffer, int maxlen);
int _chdir(const char * dirname);
int _rmdir(const char * dir);
int _mkdir(const char * dir);
#ifdef __cplusplus
};
#endif
#define getcwd _getcwd
#define chdir _chdir
#define rmdir _rmdir
#define mkdir _mkdir
#endif

1547
wince/dll.mak Normal file

File diff suppressed because it is too large Load diff

11
wince/errno.c Normal file
View file

@ -0,0 +1,11 @@
/***************************************************************
errno.c
***************************************************************/
#include <errno.h>
int errno;
int _doserrno;
int _sys_nerr;

55
wince/errno.h Normal file
View file

@ -0,0 +1,55 @@
#ifndef ERRNO_H
#define ERRNO_H 1
#define EPERM 1
#define ENOENT 2
#define ESRCH 3
#define EINTR 4
#define EIO 5
#define ENXIO 6
#define E2BIG 7
#define ENOEXEC 8
#define EBADF 9
#define ECHILD 10
#define EAGAIN 11
#define ENOMEM 12
#define EACCES 13
#define EFAULT 14
#define EOSERR 15 // rk
#define EBUSY 16
#define EEXIST 17
#define EXDEV 18
#define ENODEV 19
#define ENOTDIR 20
#define EISDIR 21
#define EINVAL 22
#define ENFILE 23
#define EMFILE 24
#define ENOTTY 25
#define EFBIG 27
#define ENOSPC 28
#define ESPIPE 29
#define EROFS 30
#define EMLINK 31
#define EPIPE 32
#define EDOM 33
#define ERANGE 34
#define EDEADLK 36
#define ENOSYS 37
#ifdef __cplusplus
extern "C" {
#endif
extern int errno;
extern int _doserrno;
extern int _sys_nerr;
#define sys_nerr _sys_nerr
#ifdef __cplusplus
};
#endif
#endif

353
wince/exe.mak Normal file
View file

@ -0,0 +1,353 @@
!IF "$(CFG)" == ""
CFG=MIPS
!MESSAGE CFG not specified. use MIPS.
!ENDIF
!IF "$(CESubsystem)" == ""
#CESubsystem=windowsce,2.0
CESubsystem=windowsce,3.0
#!MESSAGE CESubsystem not specified. use windowsce,2.11.
!MESSAGE CESubsystem not specified. use windowsce,3.0.
!ENDIF
!IF "$(CEVersion)" == ""
#CEVersion=200
CEVersion=300
#!MESSAGE CEVersion not specified. use 211.
!MESSAGE CEVersion not specified. use 300.
!ENDIF
!IF $(CEVersion) < 201
CECrt=L
CECrtDebug=Ld
CECrtMT=T
CECrtMTDebug=Td
CENoDefaultLib=corelibc.lib
CEx86Corelibc=
!ELSE
CECrt=C
CECrtDebug=C
CECrtMT=C
CECrtMTDebug=C
CENoDefaultLib=libc.lib /nodefaultlib:libcd.lib /nodefaultlib:libcmt.lib /nodefaultlib:libcmtd.lib /nodefaultlib:msvcrt.lib /nodefaultlib:msvcrtd.lib
CEx86Corelibc=corelibc.lib
!ENDIF
!IF "$(CE_PLATFORM)"==""
CePlatform=WIN32_PLATFORM_UNKNOWN
!ELSE
CePlatform=$(CE_PLATFORM)
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
!IF "$(CFG)" == "MIPS"
OUTDIR=.\MIPSRel
INTDIR=.\MIPSRel
# Begin Custom Macros
OutDir=.\MIPSRel
# End Custom Macros
ALL : "$(OUTDIR)\ruby.exe"
CLEAN :
-@erase "$(INTDIR)\main.obj"
-@erase "$(INTDIR)\wincemain.obj"
-@erase "$(OUTDIR)\ruby.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
RSC=rc.exe
CPP=clmips.exe
CPP_PROJ=/nologo /W3 /I "." /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /Fp"$(INTDIR)\ruby.pch" /YX /Fo"$(INTDIR)\\" /Oxs /M$(CECrtMT) /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ruby.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=commctrl.lib coredll.lib mswince_ruby17.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /incremental:no /pdb:"$(OUTDIR)\ruby.pdb" /nodefaultlib:"$(CENoDefaultLib)" /out:"$(OUTDIR)\ruby.exe" /libpath:"$(OUTDIR)" /subsystem:$(CESubsystem) /MACHINE:MIPS
LINK32_OBJS= \
"$(INTDIR)\main.obj" \
"$(INTDIR)\wincemain.obj"
"$(OUTDIR)\ruby.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "SH4"
OUTDIR=.\SH4Rel
INTDIR=.\SH4Rel
# Begin Custom Macros
OutDir=.\SH4Rel
# End Custom Macros
ALL : "$(OUTDIR)\ruby.exe"
CLEAN :
-@erase "$(INTDIR)\main.obj"
-@erase "$(INTDIR)\wincemain.obj"
-@erase "$(OUTDIR)\ruby.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
RSC=rc.exe
CPP=shcl.exe
CPP_PROJ=/nologo /W3 /I "." /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /Fp"$(INTDIR)\ruby.pch" /YX /Fo"$(INTDIR)\\" /Qsh4 /Oxs /M$(CECrtMT) /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ruby.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=commctrl.lib coredll.lib mswince_ruby17.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /incremental:no /pdb:"$(OUTDIR)\ruby.pdb" /nodefaultlib:"$(CENoDefaultLib)" /out:"$(OUTDIR)\ruby.exe" /libpath:"$(OUTDIR)" /subsystem:$(CESubsystem) /MACHINE:SH4
LINK32_OBJS= \
"$(INTDIR)\main.obj" \
"$(INTDIR)\wincemain.obj"
"$(OUTDIR)\ruby.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "SH3"
OUTDIR=.\SH3Rel
INTDIR=.\SH3Rel
# Begin Custom Macros
OutDir=.\SH3Rel
# End Custom Macros
ALL : "$(OUTDIR)\ruby.exe"
CLEAN :
-@erase "$(INTDIR)\main.obj"
-@erase "$(INTDIR)\wincemain.obj"
-@erase "$(OUTDIR)\ruby.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
RSC=rc.exe
CPP=shcl.exe
CPP_PROJ=/nologo /W3 /I "." /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /Fp"$(INTDIR)\ruby.pch" /YX /Fo"$(INTDIR)\\" /Oxs /M$(CECrtMT) /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ruby.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=commctrl.lib coredll.lib mswince_ruby17.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /incremental:no /pdb:"$(OUTDIR)\ruby.pdb" /nodefaultlib:"$(CENoDefaultLib)" /out:"$(OUTDIR)\ruby.exe" /libpath:"$(OUTDIR)" /subsystem:$(CESubsystem) /MACHINE:SH3
LINK32_OBJS= \
"$(INTDIR)\main.obj" \
"$(INTDIR)\wincemain.obj"
"$(OUTDIR)\ruby.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == ARM"
OUTDIR=.\ARMRel
INTDIR=.\ARMRel
# Begin Custom Macros
OutDir=.\ARMRel
# End Custom Macros
ALL : "$(OUTDIR)\ruby.exe"
CLEAN :
-@erase "$(INTDIR)\main.obj"
-@erase "$(INTDIR)\wincemain.obj"
-@erase "$(OUTDIR)\ruby.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
RSC=rc.exe
CPP=clarm.exe
CPP_PROJ=/nologo /W3 /I "C:\_develops\eMVT\ruby17\ruby\wince" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /Fp"$(INTDIR)\ruby.pch" /YX /Fo"$(INTDIR)\\" /Oxs /M$(CECrtMT) /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ruby.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=commctrl.lib coredll.lib mswince_ruby17.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"WinMainCRTStartup" /incremental:no /pdb:"$(OUTDIR)\ruby.pdb" /nodefaultlib:"$(CENoDefaultLib)" /out:"$(OUTDIR)\ruby.exe" /libpath:"$(OUTDIR)" /subsystem:$(CESubsystem) /align:"4096" /MACHINE:ARM
LINK32_OBJS= \
"$(INTDIR)\main.obj" \
"$(INTDIR)\wincemain.obj"
"$(OUTDIR)\ruby.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
..\main.c : \
"..\defines.h"\
"..\intern.h"\
"..\missing.h"\
"..\ruby.h"\
"..\vms\vms.h"\
"..\win32\win32.h"\
.\wincemain.c : \
".\wince.h"\
SOURCE=..\main.c
"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=.\wincemain.c
"$(INTDIR)\wincemain.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)

42
wince/fcntl.h Normal file
View file

@ -0,0 +1,42 @@
#ifndef FCNTL_H
#define FCNTL_H 1
#define F_SETFL 1
#define F_SETFD 2
#define F_GETFL 3
#define _O_RDONLY 0x0000 /* open for reading only */
#define _O_WRONLY 0x0001 /* open for writing only */
#define _O_RDWR 0x0002 /* open for reading and writing */
#define _O_NONBLOCK 0x0004
#define _O_APPEND 0x0008 /* writes done at eof */
#define _O_CREAT 0x0100 /* create and open file */
#define _O_TRUNC 0x0200 /* open and truncate */
#define _O_EXCL 0x0400 /* open only if file doesn't already exist */
#define _O_TEXT 0x4000 /* file mode is text (translated) */
#define _O_BINARY 0x8000 /* file mode is binary (untranslated) */
#define _O_ACCMODE 0x10000
#define _O_NOINHERIT 0
#define O_NOINHERIT _O_NOINHERIT
#define O_RDONLY _O_RDONLY
#define O_WRONLY _O_WRONLY
#define O_RDWR _O_RDWR
#define O_NONBLOCK _O_NONBLOCK
#define O_APPEND _O_APPEND
#define O_CREAT _O_CREAT
#define O_TRUNC _O_TRUNC
#define O_EXCL _O_EXCL
#define O_TEXT _O_TEXT
#define O_BINARY _O_BINARY
#define O_ACCMODE _O_ACCMODE
#endif

222
wince/io.c Normal file
View file

@ -0,0 +1,222 @@
/***************************************************************
io.c
author : uema2
date : Nov 30, 2002
You can freely use, copy, modify, and redistribute
the whole contents.
***************************************************************/
#include <windows.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include "wince.h" /* for wce_mbtowc */
extern int _errno;
int _rename(const char *oldname, const char *newname)
{
wchar_t *wold, *wnew;
BOOL rc;
wold = wce_mbtowc(oldname);
wnew = wce_mbtowc(newname);
/* replace with MoveFile. */
rc = MoveFileW(wold, wnew);
free(wold);
free(wnew);
return rc==TRUE ? 0 : -1;
}
int _unlink(const char *file)
{
wchar_t *wfile;
BOOL rc;
/* replace with DeleteFile. */
wfile = wce_mbtowc(file);
rc = DeleteFileW(wfile);
free(wfile);
return rc==TRUE ? 0 : -1;
}
/* replace "open" with "CreateFile", etc. */
int _open(const char *file, int mode, va_list arg)
{
wchar_t *wfile;
DWORD access=0, share=0, create=0;
HANDLE h;
if( (mode&_O_RDWR) != 0 )
access = GENERIC_READ|GENERIC_WRITE;
else if( (mode&_O_RDONLY) != 0 )
access = GENERIC_READ;
else if( (mode&_O_WRONLY) != 0 )
access = GENERIC_WRITE;
if( (mode&_O_CREAT) != 0 )
create = CREATE_ALWAYS;
else
create = OPEN_ALWAYS;
wfile = wce_mbtowc(file);
h = CreateFileW(wfile, access, share, NULL,
create, 0, NULL );
free(wfile);
return (int)h;
}
int _close(int fd)
{
CloseHandle( (HANDLE)fd );
return 0;
}
int _read(int fd, void *buffer, int length)
{
DWORD dw;
ReadFile( (HANDLE)fd, buffer, length, &dw, NULL );
return (int)dw;
}
int _write(int fd, const void *buffer, unsigned count)
{
DWORD dw;
WriteFile( (HANDLE)fd, buffer, count, &dw, NULL );
return (int)dw;
}
long _lseek(int handle, long offset, int origin)
{
DWORD flag, ret;
switch(origin)
{
case SEEK_SET: flag = FILE_BEGIN; break;
case SEEK_CUR: flag = FILE_CURRENT; break;
case SEEK_END: flag = FILE_END; break;
default: flag = FILE_CURRENT; break;
}
ret = SetFilePointer( (HANDLE)handle, offset, NULL, flag );
return ret==0xFFFFFFFF ? -1 : 0;
}
/* _findfirst, _findnext, _findclose. */
/* replace them with FindFirstFile, etc. */
long _findfirst( char *file, struct _finddata_t *fi )
{
HANDLE h;
WIN32_FIND_DATAA fda;
h = FindFirstFileA( file, &fda );
if( h==NULL )
{
errno = EINVAL; return -1;
}
fi->attrib = fda.dwFileAttributes;
fi->time_create = wce_FILETIME2time_t( &fda.ftCreationTime );
fi->time_access = wce_FILETIME2time_t( &fda.ftLastAccessTime );
fi->time_write = wce_FILETIME2time_t( &fda.ftLastWriteTime );
fi->size = fda.nFileSizeLow + (fda.nFileSizeHigh<<32);
strcpy( fi->name, fda.cFileName );
return (long)h;
}
int _findnext( long handle, struct _finddata_t *fi )
{
WIN32_FIND_DATAA fda;
BOOL b;
b = FindNextFileA( (HANDLE)handle, &fda );
if( b==FALSE )
{
errno = ENOENT; return -1;
}
fi->attrib = fda.dwFileAttributes;
fi->time_create = wce_FILETIME2time_t( &fda.ftCreationTime );
fi->time_access = wce_FILETIME2time_t( &fda.ftLastAccessTime );
fi->time_write = wce_FILETIME2time_t( &fda.ftLastWriteTime );
fi->size = fda.nFileSizeLow + (fda.nFileSizeHigh<<32);
strcpy( fi->name, fda.cFileName );
return 0;
}
int _findclose( long handle )
{
BOOL b;
b = FindClose( (HANDLE)handle );
return b==FALSE ? -1 : 0;
}
/* below functions unsupported... */
/* I have no idea how to replace... */
int _chsize(int handle, long size)
{
errno = EACCES;
return -1;
}
int _umask(int cmask)
{
return 0;
}
int _chmod(const char *path, int mode)
{
return 0;
}
int _dup( int handle )
{
errno = EBADF;
return -1;
}
int _isatty(int fd)
{
if( fd==(int)_fileno(stdin) ||
fd==(int)_fileno(stdout)||
fd==(int)_fileno(stderr) )
return 1;
else
return 0;
}
int _pipe(int *phandles, unsigned int psize, int textmode)
{
return -1;
}
int _access(const char *filename, int flags)
{
return 0;
}
int _open_osfhandle( long osfhandle, int flags)
{
/* return 0; */
return (int)osfhandle;
}
long _get_osfhandle( int filehandle )
{
/* return 0; */
return (long)filehandle;
}

65
wince/io.h Normal file
View file

@ -0,0 +1,65 @@
#ifndef _IO_H_
#define _IO_H_
#ifndef _FSIZE_T_DEFINED
typedef unsigned long _fsize_t; /* Could be 64 bits for Win32 */
#define _FSIZE_T_DEFINED
#endif
#ifndef _FINDDATA_T_DEFINED
struct _finddata_t {
unsigned attrib;
time_t time_create; /* -1 for FAT file systems */
time_t time_access; /* -1 for FAT file systems */
time_t time_write;
_fsize_t size;
char name[260];
};
#define _FINDDATA_T_DEFINED
#endif
#ifdef __cplusplus
extern "C" {
#endif
int _chsize(int handle, long size);
int _rename (const char *oldname, const char *newname);
int _unlink(const char *file);
int _umask(int cmask);
int _chmod(const char *path, int mode);
int _dup( int handle );
int _isatty(int fd);
int _pipe(int *phandles, unsigned int psize, int textmode);
int _access(const char *filename, int flags);
int _open_osfhandle ( long osfhandle, int flags);
long _get_osfhandle( int filehandle );
int _open(const char *file, int mode,...);
int _close(int fd);
int _read(int fd, void *buffer, int length);
int _write(int fd, const void *buffer, unsigned count);
long _lseek(int handle, long offset, int origin);
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
int _findnext( long handle, struct _finddata_t *fileinfo );
int _findclose( long handle );
#ifdef __cplusplus
};
#endif
#define chsize _chsize
#define rename _rename
#define unlink _unlink
#define open _open
//#define close _close
#define read _read
#define write _write
#define umask _umask
#define dup _dup
#define isatty _isatty
#define access _access
#define pipe _pipe
#endif

814
wince/mswince-ruby17.def Normal file
View file

@ -0,0 +1,814 @@
EXPORTS
ChildRecord
GetCurrentThreadHandle
Init_Array
Init_Bignum
Init_Comparable
Init_Dir
Init_Enumerable
Init_Exception
Init_File
Init_GC
Init_Hash
Init_IO
Init_Math
Init_Numeric
Init_Object
Init_Precision
Init_Proc
Init_Random
Init_Range
Init_Regexp
Init_String
Init_Struct
Init_Thread
Init_Time
Init_eval
Init_ext
Init_heap
Init_load
Init_marshal
Init_pack
Init_process
Init_signal
Init_stack
Init_sym
Init_var_tables
Init_version
NTLoginName
NtCmdGlob
NtCmdHead
NtCmdTail
NtFreeCmdLine
NtInitialize
NtMakeCmdVector
NtSyncProcess
SafeFree
acosh
asinh
atanh
chown
crypt
definekey
dln_find_exe
dln_find_file
dln_load
do_spawn
eaccess
encrypt
endhostent
endnetent
endprotoent
endservent
flock
getegid
geteuid
getgid
getlogin
getnetbyaddr
getnetbyname
getnetent
getprotoent
getservent
gettimeofday
getuid
ioctl
isInternalCmd
isinf
isnan
kill
link
pipe_exec
rb_Array
rb_Float
rb_Integer
rb_String
rb_add_method
rb_alias
rb_alias_variable
rb_any_to_s
rb_apply
rb_argv
rb_argv0
rb_ary_aref
rb_ary_assoc
rb_ary_clear
rb_ary_cmp
rb_ary_concat
rb_ary_delete
rb_ary_delete_at
rb_ary_dup
rb_ary_each
rb_ary_entry
rb_ary_freeze
rb_ary_includes
rb_ary_join
rb_ary_new
rb_ary_new2
rb_ary_new3
rb_ary_new4
rb_ary_plus
rb_ary_pop
rb_ary_push
rb_ary_rassoc
rb_ary_reverse
rb_ary_shift
rb_ary_sort
rb_ary_sort_bang
rb_ary_store
rb_ary_to_ary
rb_ary_to_s
rb_ary_unshift
rb_assoc_new
rb_attr
rb_autoload
rb_autoload_defined
rb_autoload_load
rb_backref_get
rb_backref_set
rb_backtrace
rb_big2dbl
rb_big2ll
rb_big2long
rb_big2str
rb_big2ull
rb_big2ulong
rb_big_2comp
rb_big_and
rb_big_clone
rb_big_divmod
rb_big_lshift
rb_big_minus
rb_big_mul
rb_big_norm
rb_big_or
rb_big_plus
rb_big_pow
rb_big_rand
rb_big_xor
rb_block_given_p
rb_bug
rb_cArray
rb_cBignum
rb_cClass
rb_cData
rb_cDir
rb_cFalseClass
rb_cFile
rb_cFixnum
rb_cFloat
rb_cHash
rb_cIO
rb_cInteger
rb_cModule
rb_cNilClass
rb_cNumeric
rb_cObject
rb_cProc
rb_cRange
rb_cRegexp
rb_cString
rb_cStruct
rb_cSymbol
rb_cThread
rb_cTime
rb_cTrueClass
rb_call_inits
rb_call_super
rb_catch
rb_check_convert_type
rb_check_frozen
rb_check_safe_str
rb_check_type
rb_class2name
rb_class_boot
rb_class_inherited
rb_class_instance_methods
rb_class_new
rb_class_new_instance
rb_class_path
rb_class_private_instance_methods
rb_class_protected_instance_methods
rb_class_public_instance_methods
rb_class_real
rb_class_tbl
rb_clear_cache
rb_cmpint
rb_compile_cstr
rb_compile_error
rb_compile_error_append
rb_compile_file
rb_compile_string
rb_const_assign
rb_const_defined
rb_const_defined_at
rb_const_get
rb_const_get_at
rb_const_list
rb_const_set
rb_convert_type
rb_copy_generic_ivar
rb_cstr2inum
rb_cstr_to_dbl
rb_cstr_to_inum
rb_cv_get
rb_cv_set
rb_cvar_defined
rb_cvar_get
rb_cvar_set
rb_data_object_alloc
rb_dbl2big
rb_dbl_cmp
rb_default_rs
rb_define_alias
rb_define_attr
rb_define_class
rb_define_class_id
rb_define_class_under
rb_define_class_variable
rb_define_const
rb_define_global_const
rb_define_global_function
rb_define_hooked_variable
rb_define_method
rb_define_method_id
rb_define_module
rb_define_module_function
rb_define_module_id
rb_define_module_under
rb_define_private_method
rb_define_protected_method
rb_define_readonly_variable
rb_define_singleton_method
rb_define_variable
rb_define_virtual_variable
rb_defout
rb_disable_super
rb_dvar_curr
rb_dvar_defined
rb_dvar_push
rb_dvar_ref
rb_eArgError
rb_eEOFError
rb_eException
rb_eFatal
rb_eFloatDomainError
rb_eIOError
rb_eIndexError
rb_eInterrupt
rb_eLoadError
rb_eNameError
rb_eNoMemError
rb_eNoMethodError
rb_eNotImpError
rb_eRangeError
rb_eRuntimeError
rb_eScriptError
rb_eSecurityError
rb_eSignal
rb_eStandardError
rb_eSyntaxError
rb_eSystemCallError
rb_eSystemExit
rb_eTypeError
rb_eZeroDivError
rb_each
rb_enable_super
rb_ensure
rb_env_path_tainted
rb_eof_error
rb_eql
rb_equal
rb_error_frozen
rb_eval_cmd
rb_eval_string
rb_eval_string_protect
rb_eval_string_wrap
rb_exc_fatal
rb_exc_new
rb_exc_new2
rb_exc_new3
rb_exc_raise
rb_exec_end_proc
rb_exit
rb_extend_object
rb_f_autoload
rb_f_exec
rb_f_global_variables
rb_f_kill
rb_f_lambda
rb_f_require
rb_f_sprintf
rb_f_trace_var
rb_f_untrace_var
rb_fatal
rb_fdopen
rb_file_const
rb_file_open
rb_file_s_expand_path
rb_file_sysopen
rb_find_file
rb_find_file_ext
rb_fix2int
rb_fix2str
rb_float_new
rb_fopen
rb_frame_last_func
rb_free_generic_ivar
rb_frozen_class_p
rb_fs
rb_funcall
rb_funcall2
rb_funcall3
rb_gc
rb_gc_call_finalizer_at_exit
rb_gc_disable
rb_gc_enable
rb_gc_force_recycle
rb_gc_mark
rb_gc_mark_frame
rb_gc_mark_global_tbl
rb_gc_mark_locations
rb_gc_mark_maybe
rb_gc_mark_parser
rb_gc_mark_threads
rb_gc_mark_trap_list
rb_gc_register_address
rb_gc_stack_start
rb_gc_start
rb_gc_unregister_address
rb_generic_ivar_table
rb_get_kcode
rb_getc
rb_gets
rb_glob
rb_global_entry
rb_global_variable
rb_globi
rb_gv_get
rb_gv_set
rb_gvar_defined
rb_gvar_get
rb_gvar_set
rb_hash
rb_hash_aref
rb_hash_aset
rb_hash_delete
rb_hash_delete_if
rb_hash_freeze
rb_hash_new
rb_hash_reject_bang
rb_hash_select
rb_id2name
rb_id_attrset
rb_include_module
rb_inspect
rb_inspecting_p
rb_int2big
rb_int2inum
rb_intern
rb_interrupt
rb_invalid_str
rb_io_addstr
rb_io_binmode
rb_io_check_closed
rb_io_check_readable
rb_io_check_writable
rb_io_close
rb_io_eof
rb_io_fptr_finalize
rb_io_fread
rb_io_getc
rb_io_gets
rb_io_mode_flags
rb_io_print
rb_io_printf
rb_io_puts
rb_io_synchronized
rb_io_taint_check
rb_io_unbuffered
rb_io_ungetc
rb_io_wait_readable
rb_io_wait_writable
rb_io_write
rb_is_class_id
rb_is_const_id
rb_is_instance_id
rb_is_junk_id
rb_is_local_id
rb_iter_break
rb_iterate
rb_iterator_p
rb_iv_get
rb_iv_set
rb_ivar_defined
rb_ivar_get
rb_ivar_set
rb_jump_tag
rb_kcode
rb_last_status
rb_lastline_get
rb_lastline_set
rb_ll2big
rb_ll2inum
rb_load
rb_load_fail
rb_load_file
rb_load_path
rb_load_protect
rb_loaderror
rb_mComparable
rb_mEnumerable
rb_mErrno
rb_mFileTest
rb_mGC
rb_mKernel
rb_mMath
rb_mPrecision
rb_mProcess
rb_make_metaclass
rb_mark_end_proc
rb_mark_generic_ivar
rb_mark_generic_ivar_tbl
rb_mark_hash
rb_mark_tbl
rb_marshal_dump
rb_marshal_load
rb_match_busy
rb_mem_clear
rb_memcicmp
rb_memcmp
rb_memerror
rb_method_boundp
rb_mod_ancestors
rb_mod_class_variables
rb_mod_clone
rb_mod_const_at
rb_mod_const_of
rb_mod_constants
rb_mod_dup
rb_mod_include_p
rb_mod_included_modules
rb_mod_module_eval
rb_mod_name
rb_mod_remove_const
rb_mod_remove_cvar
rb_module_new
rb_name_class
rb_name_error
rb_newobj
rb_node_newnode
rb_notimplement
rb_num2dbl
rb_num2fix
rb_num2int
rb_num2ll
rb_num2long
rb_num2ull
rb_num2ulong
rb_num_coerce_bin
rb_num_zerodiv
rb_obj_alloc
rb_obj_as_string
rb_obj_become
rb_obj_call_init
rb_obj_class
rb_obj_clone
rb_obj_dup
rb_obj_freeze
rb_obj_id
rb_obj_id_obsolete
rb_obj_instance_eval
rb_obj_instance_variables
rb_obj_is_instance_of
rb_obj_is_kind_of
rb_obj_remove_instance_variable
rb_obj_singleton_methods
rb_obj_taint
rb_obj_tainted
rb_obj_type
rb_obj_untaint
rb_origenviron
rb_output_fs
rb_output_rs
rb_p
rb_parser_append_print
rb_parser_while_loop
rb_path2class
rb_path_check
rb_proc_exec
rb_proc_new
rb_proc_times
rb_progname
rb_prohibit_interrupt
rb_protect
rb_protect_inspect
rb_provide
rb_provided
rb_quad_pack
rb_quad_unpack
rb_raise
rb_range_beg_len
rb_range_new
rb_read_check
rb_read_pending
rb_reg_adjust_startpos
rb_reg_last_match
rb_reg_match
rb_reg_match2
rb_reg_match_last
rb_reg_match_post
rb_reg_match_pre
rb_reg_mbclen2
rb_reg_new
rb_reg_nth_defined
rb_reg_nth_match
rb_reg_options
rb_reg_quote
rb_reg_regcomp
rb_reg_regsub
rb_reg_search
rb_remove_method
rb_require
rb_rescue
rb_rescue2
rb_reserved_word
rb_respond_to
rb_rs
rb_scan_args
rb_secure
rb_set_class_path
rb_set_end_proc
rb_set_kcode
rb_set_safe_level
rb_singleton_class
rb_singleton_class_attached
rb_singleton_class_clone
rb_source_filename
rb_stderr
rb_stdin
rb_stdout
rb_str2cstr
rb_str2inum
rb_str_append
rb_str_associate
rb_str_associated
rb_str_buf_append
rb_str_buf_cat
rb_str_buf_cat2
rb_str_buf_new
rb_str_buf_new2
rb_str_cat
rb_str_cat2
rb_str_cmp
rb_str_concat
rb_str_dump
rb_str_dup
rb_str_dup_frozen
rb_str_freeze
rb_str_hash
rb_str_inspect
rb_str_intern
rb_str_modify
rb_str_new
rb_str_new2
rb_str_new3
rb_str_new4
rb_str_new5
rb_str_plus
rb_str_resize
rb_str_setter
rb_str_split
rb_str_substr
rb_str_times
rb_str_to_dbl
rb_str_to_inum
rb_str_to_str
rb_str_update
rb_str_upto
rb_string_value
rb_string_value_ptr
rb_struct_alloc
rb_struct_aref
rb_struct_aset
rb_struct_define
rb_struct_getmember
rb_struct_iv_get
rb_struct_new
rb_svar
rb_sym_all_symbols
rb_sys_fail
rb_sys_warning
rb_syswait
rb_tainted_str_new
rb_tainted_str_new2
rb_thread_alone
rb_thread_atfork
rb_thread_create
rb_thread_critical
rb_thread_current
rb_thread_fd_close
rb_thread_fd_writable
rb_thread_interrupt
rb_thread_list
rb_thread_local_aref
rb_thread_local_aset
rb_thread_main
rb_thread_pending
rb_thread_polling
rb_thread_run
rb_thread_schedule
rb_thread_select
rb_thread_signal_raise
rb_thread_sleep
rb_thread_sleep_forever
rb_thread_stop
rb_thread_tick
rb_thread_trap_eval
rb_thread_wait_fd
rb_thread_wait_for
rb_thread_wakeup
rb_throw
rb_time_interval
rb_time_new
rb_time_timeval
rb_to_id
rb_to_int
rb_trap_exec
rb_trap_exit
rb_trap_immediate
rb_trap_pending
rb_trap_restore_mask
rb_uint2big
rb_uint2inum
rb_ull2big
rb_ull2inum
rb_undef
rb_undef_method
rb_w32_accept
rb_w32_asynchronize
rb_w32_bind
rb_w32_close
rb_w32_closedir
rb_w32_connect
rb_w32_enter_critical
rb_w32_fclose
rb_w32_fdclr
rb_w32_fdisset
rb_w32_fdset
rb_w32_free_environ
rb_w32_get_environ
rb_w32_get_osfhandle
rb_w32_getc
rb_w32_getcwd
rb_w32_getenv
rb_w32_gethostbyaddr
rb_w32_gethostbyname
rb_w32_gethostname
rb_w32_getpeername
rb_w32_getpid
rb_w32_getprotobyname
rb_w32_getprotobynumber
rb_w32_getservbyname
rb_w32_getservbyport
rb_w32_getsockname
rb_w32_getsockopt
rb_w32_ioctlsocket
rb_w32_leave_critical
rb_w32_listen
rb_w32_main_context
rb_w32_opendir
rb_w32_putc
rb_w32_readdir
rb_w32_recv
rb_w32_recvfrom
rb_w32_rename
rb_w32_rewinddir
rb_w32_seekdir
rb_w32_select
rb_w32_send
rb_w32_sendto
rb_w32_setsockopt
rb_w32_shutdown
rb_w32_sleep
rb_w32_socket
rb_w32_stat
rb_w32_strerror
rb_w32_telldir
rb_w32_times
rb_waitpid
rb_warn
rb_warning
rb_with_disable_interrupt
rb_yield
re_mbctab
re_set_syntax
ruby__end__seen
ruby_add_suffix
ruby_class
ruby_cleanup
ruby_current_node
ruby_debug
ruby_dln_librefs
ruby_dyna_vars
ruby_errinfo
ruby_eval_tree
ruby_eval_tree_begin
ruby_exec
ruby_finalize
ruby_frame
ruby_getcwd
ruby_ignorecase
ruby_in_compile
ruby_in_eval
ruby_incpush
ruby_init
ruby_init_loadpath
ruby_inplace_mode
ruby_nerrs
ruby_options
ruby_parser_stack_on_heap
ruby_process_options
ruby_prog_init
ruby_qsort
ruby_re_adjust_startpos
ruby_re_compile_fastmap
ruby_re_compile_pattern
ruby_re_copy_registers
ruby_re_free_pattern
ruby_re_free_registers
ruby_re_match
ruby_re_mbcinit
ruby_re_search
ruby_re_set_casetable
ruby_run
ruby_safe_level
ruby_scan_hex
ruby_scan_oct
ruby_scope
ruby_script
ruby_set_argv
ruby_set_current_source
ruby_setenv
ruby_show_copyright
ruby_show_version
ruby_sourcefile
ruby_sourceline
ruby_stack_check
ruby_stack_length
ruby_stop
ruby_strdup
ruby_strtod
ruby_top_self
ruby_unsetenv
ruby_verbose
ruby_xcalloc
ruby_xfree
ruby_xmalloc
ruby_xrealloc
ruby_yychar
ruby_yydebug
ruby_yylval
ruby_yyparse
setgid
sethostent
setnetent
setprotoent
setservent
setuid
st_add_direct
st_cleanup_safe
st_copy
st_delete
st_delete_safe
st_foreach
st_free_table
st_init_numtable
st_init_numtable_with_size
st_init_strtable
st_init_strtable_with_size
st_init_table
st_init_table_with_size
st_insert
st_lookup
wait
waitpid
yycheck
yydefred
yydgoto
yyerrflag
yygindex
yylen
yylhs
yyname
yynerrs
yyrindex
yyrule
yysindex
yyss
yyssp
yytable
yyval
yyvs
yyvsp
wce_SetCommandLine

47
wince/process.c Normal file
View file

@ -0,0 +1,47 @@
/***************************************************************
process.c
***************************************************************/
#include <windows.h>
#include "process.h"
int _getpid(void)
{
return (int)GetCurrentProcessId();
}
/* I wonder _exec and _swawn should be replaced with CreateProcess... */
int _execl(const char *cmdname, const char *arg0,
va_list va_args)
{
return 0;
}
int execv(const char *path, char *const argv[])
{
return 0;
}
void abort(void)
{
}
int _cwait( int *termstat, int procHandle, int action )
{
return 0;
}
intptr_t _spawnle(int mode,
const char *cmdname, const char *arg0,
va_list va_argn)
{
return 0;
}
intptr_t _spawnvpe(int mode,
const char *cmdname, const char *const *argv,
const char *const *envp)
{
return 0;
}

44
wince/process.h Normal file
View file

@ -0,0 +1,44 @@
#ifndef PROCESS_H
#define PROCESS_H 1
#define _P_WAIT 0
#define _P_NOWAIT 1
#define _P_DETACH 4
#define P_WAIT _P_WAIT
#define P_NOWAIT _P_NOWAIT
#define P_DETACH _P_DETACH
#ifndef _INTPTR_T_DEFINED
typedef int intptr_t;
#define _INTPTR_T_DEFINED
#endif
#ifdef __cplusplus
extern "C" {
#endif
int _getpid(void);
int _cwait(int *, int, int);
void abort(void);
int _execl(const char *, const char *, ...);
//int _execv(const char *, const char * const *);
int execv(const char *path, char *const argv[]);
intptr_t _spawnle(int, const char *, const char *, ...);
intptr_t _spawnvpe(int, const char *, const char * const *,
const char * const *);
#ifdef __cplusplus
};
#endif
//#define getpid _getpid
#define execl _execl
#define execv _execv
#endif

26
wince/signal.c Normal file
View file

@ -0,0 +1,26 @@
/***************************************************************
signal.c
***************************************************************/
#include <windows.h>
#include "signal.h"
/* lazy replacement... (^^; */
int raise(int sig)
{
return 0;
}
//#ifdef _WIN32_WCE
//#ifdef _WIN32_WCE_EMULATION
//void (* signal(int sig, void (*func)))
//{
// return sig;
//}
//#else
void (* signal(int sig, void (__cdecl *func)(int)))(int)
{
return sig;
}
//#endif
//#endif

71
wince/signal.h Normal file
View file

@ -0,0 +1,71 @@
#ifndef SIGNAL_H
#define SIGNAL_H 1
#include <sys/types.h>
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGPIPE 5
#define SIGFPE 8
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGTERM 15
#define SIGCHLD 17
#define SIGTSTP 20
#define SIGBREAK 21
#define SIGABRT 22
#define NSIG 22
#define SA_NOCLDSTOP 1
#define SA_SHIRQ 0x04000000
#define SA_STACK 0x08000000
#define SA_RESTART 0x10000000
#define SA_INTERRUPT 0x20000000
#define SA_NOMASK 0x40000000
#define SA_ONESHOT 0x80000000
/* signal action codes */
#define SIG_DFL (void (*)(int))0 /* default signal action */
#define SIG_IGN (void (*)(int))1 /* ignore signal */
#define SIG_SGE (void (*)(int))3 /* signal gets error */
#define SIG_ACK (void (*)(int))4 /* acknowledge */
#define SIG_ERR (void (*)(int))-1 /* signal error value */
#define SIG_BLOCK 0 /* for blocking signals */
#define SIG_UNBLOCK 1 /* for unblocking signals */
#define SIG_SETMASK 2 /* for setting the signal mask */
#ifdef __cplusplus
extern "C" {
#endif
typedef void (* SIGHANDLER)(int);
typedef void (* sighandler_t)(int);
typedef int sig_atomic_t;
typedef unsigned int sigset_t;
struct sigaction{
sighandler_t sa_handler;
sigset_t sa_mask;
unsigned long sa_flags;
void (*sa_restorer)(void);
};
int raise(int sig);
//#ifndef _WIN32_WCE_EMULATION
void (* signal(int sig, void (__cdecl *func)(int)))(int);
//#else
// void (* signal(int sig, void (*func)));
//#endif
#ifdef __cplusplus
};
#endif
#endif

5
wince/stddef.h Normal file
View file

@ -0,0 +1,5 @@
#ifndef _STDDEF_H_
#define _STDDEF_H_
#endif

36
wince/stdio.c Normal file
View file

@ -0,0 +1,36 @@
/***************************************************************
stdio.c
***************************************************************/
#include <windows.h>
#include "wince.h" /* for wce_mbtowc */
FILE *freopen(const char *filename, const char *mode, FILE *file)
{
wchar_t *wfilename, *wmode;
FILE *fp;
wfilename = wce_mbtowc(filename);
wmode = wce_mbtowc(mode);
fp = _wfreopen(wfilename, wmode, file);
free(wfilename);
free(wmode);
return fp;
}
FILE *_fdopen( int handle, const char *mode )
{
wchar_t *wmode;
FILE* fp;
wmode = wce_mbtowc(mode);
fp = _wfdopen( (void*)handle, wmode );
free(wmode);
return fp;
}

22
wince/stdlib.c Normal file
View file

@ -0,0 +1,22 @@
/***************************************************************
stdlib.c
***************************************************************/
#include <windows.h>
char **environ;
extern char * rb_w32_getenv(const char *);
/* getenv should replace with rb_w32_getenv. */
char *getenv(const char *env)
{
return rb_w32_getenv(env);
}
char *_fullpath(char *absPath, const char *relPath,
size_t maxLength)
{
strcpy( absPath, relPath );
return absPath;
}

71
wince/string.c Normal file
View file

@ -0,0 +1,71 @@
/***************************************************************
string.c
***************************************************************/
#include <windows.h>
#include "wince.h" /* for wce_mbtowc */
extern char* rb_w32_strerror(int errno);
/* _strdup already exists in stdlib.h? */
char *strdup(const char * str)
{
char *p;
p = malloc( strlen(str)+1 );
strcpy( p, str );
return p;
}
/* strerror shoud replace with rb_w32_strerror. */
char* strerror(int errno)
{
return rb_w32_strerror(errno);
}
/* _strnicmp already exists in stdlib.h? */
int _strnicmp( const char *s1, const char *s2, size_t count )
{
wchar_t *w1, *w2;
int n;
w1 = wce_mbtowc(s1);
w2 = wce_mbtowc(s2);
n = wcsnicmp(w1, w2, count);
free(w1);
free(w2);
return n;
}
#if _WIN32_WCE < 300
#include "..\missing\strtoul.c"
char *strrchr( const char *p, int c )
{
char *pp;
for( pp=(char*)p+strlen(p); pp!=p; p-- )
{
if( *pp==c ) break;
}
return pp==p ? NULL : pp;
}
int _stricmp( const char *s1, const char *s2 )
{
wchar_t *w1, *w2;
int n;
w1 = wce_mbtowc(s1);
w2 = wce_mbtowc(s2);
n = wcsicmp(w1, w2);
free(w1);
free(w2);
return n;
}
#endif

299
wince/time.c Normal file
View file

@ -0,0 +1,299 @@
/***************************************************************
time.c
author : uema2
date : Nov 30, 2002
You can freely use, copy, modify, and redistribute
the whole contents.
***************************************************************/
/*#define __SCRATCH_TIMEC_DEBUG__ */
#include <windows.h>
#include <tchar.h>
#include <time.h>
/* globals */
const __int64 _onesec_in100ns = (__int64)10000000;
int timezone, _timezone, altzone;
int daylight;
char *tzname[2];
/* __int64 <--> FILETIME */
static __int64 wce_FILETIME2int64(FILETIME f)
{
__int64 t;
t = f.dwHighDateTime;
t <<= 32;
t |= f.dwLowDateTime;
return t;
}
static FILETIME wce_int642FILETIME(__int64 t)
{
FILETIME f;
f.dwHighDateTime = (DWORD)((t >> 32) & 0x00000000FFFFFFFF);
f.dwLowDateTime = (DWORD)( t & 0x00000000FFFFFFFF);
return f;
}
/* FILETIME utility */
static FILETIME wce_getFILETIMEFromYear(WORD year)
{
SYSTEMTIME s={0};
FILETIME f;
s.wYear = year;
s.wMonth = 1;
s.wDayOfWeek = 1;
s.wDay = 1;
SystemTimeToFileTime( &s, &f );
return f;
}
static time_t wce_getYdayFromSYSTEMTIME(const SYSTEMTIME* s)
{
__int64 t;
FILETIME f1, f2;
f1 = wce_getFILETIMEFromYear( s->wYear );
SystemTimeToFileTime( s, &f2 );
t = wce_FILETIME2int64(f2)-wce_FILETIME2int64(f1);
return (time_t)((t/_onesec_in100ns)/(60*60*24));
}
/* tm <--> SYSTEMTIME */
static SYSTEMTIME wce_tm2SYSTEMTIME(struct tm *t)
{
SYSTEMTIME s;
s.wYear = t->tm_year + 1900;
s.wMonth = t->tm_mon + 1;
s.wDayOfWeek = t->tm_wday;
s.wDay = t->tm_mday;
s.wHour = t->tm_hour;
s.wMinute = t->tm_min;
s.wSecond = t->tm_sec;
s.wMilliseconds = 0;
return s;
}
static struct tm wce_SYSTEMTIME2tm(SYSTEMTIME *s)
{
struct tm t;
t.tm_year = s->wYear - 1900;
t.tm_mon = s->wMonth- 1;
t.tm_wday = s->wDayOfWeek;
t.tm_mday = s->wDay;
t.tm_yday = wce_getYdayFromSYSTEMTIME(s);
t.tm_hour = s->wHour;
t.tm_min = s->wMinute;
t.tm_sec = s->wSecond;
t.tm_isdst = 0;
return t;
}
/* FILETIME <--> time_t */
time_t wce_FILETIME2time_t(const FILETIME* f)
{
FILETIME f1601, f1970;
__int64 t, offset;
f1601 = wce_getFILETIMEFromYear(1601);
f1970 = wce_getFILETIMEFromYear(1970);
offset = wce_FILETIME2int64(f1970) - wce_FILETIME2int64(f1601);
t = wce_FILETIME2int64(*f);
t -= offset;
return (time_t)(t / _onesec_in100ns);
}
FILETIME wce_time_t2FILETIME(const time_t t)
{
FILETIME f, f1970;
__int64 time;
f1970 = wce_getFILETIMEFromYear(1970);
time = t;
time *= _onesec_in100ns;
time += wce_FILETIME2int64(f1970);
f = wce_int642FILETIME(time);
return f;
}
/* time.h difinition */
time_t time( time_t *timer )
{
SYSTEMTIME s;
FILETIME f;
GetSystemTime( &s );
SystemTimeToFileTime( &s, &f );
*timer = wce_FILETIME2time_t(&f);
return *timer;
}
struct tm *localtime( const time_t *timer )
{
SYSTEMTIME ss, ls, s;
FILETIME sf, lf, f;
__int64 t, diff;
static struct tm tms;
GetSystemTime(&ss);
GetLocalTime(&ls);
SystemTimeToFileTime( &ss, &sf );
SystemTimeToFileTime( &ls, &lf );
diff = wce_FILETIME2int64(sf) - wce_FILETIME2int64(lf);
f = wce_time_t2FILETIME(*timer);
t = wce_FILETIME2int64(f) - diff;
f = wce_int642FILETIME(t);
FileTimeToSystemTime( &f, &s );
tms = wce_SYSTEMTIME2tm(&s);
return &tms;
}
time_t mktime(struct tm* pt)
{
SYSTEMTIME ss, ls, s;
FILETIME sf, lf, f;
__int64 diff;
GetSystemTime(&ss);
GetLocalTime(&ls);
SystemTimeToFileTime( &ss, &sf );
SystemTimeToFileTime( &ls, &lf );
diff = (wce_FILETIME2int64(lf)-wce_FILETIME2int64(sf))/_onesec_in100ns;
s = wce_tm2SYSTEMTIME(pt);
SystemTimeToFileTime( &s, &f );
return wce_FILETIME2time_t(&f) - (time_t)diff;
}
struct tm *gmtime(const time_t *t)
{
FILETIME f;
SYSTEMTIME s;
static struct tm tms;
f = wce_time_t2FILETIME(*t);
FileTimeToSystemTime(&f, &s);
tms = wce_SYSTEMTIME2tm(&s);
return &tms;
}
char* ctime( const time_t *t )
{
// Wed Jan 02 02:03:55 1980\n\0
static char buf[30]={0};
char week[] = "Sun Mon Tue Wed Thr Fri Sat ";
char month[]= "Jan Feb Mar Apl May Jun Jul Aug Sep Oct Nov Dec ";
struct tm tms;
tms = *localtime(t);
strncpy( buf, week+tms.tm_wday*4, 4 );
strncpy( buf+4, month+tms.tm_mon*4, 4 );
sprintf( buf+8, "%02d ", tms.tm_mday );
sprintf( buf+11, "%02d:%02d:%02d %d\n",
tms.tm_hour, tms.tm_min, tms.tm_sec, tms.tm_year+1900 );
return buf;
}
char *asctime(const struct tm *pt)
{
static char buf[30]={0};
char week[] = "Sun Mon Tue Wed Thr Fri Sat ";
char month[]= "Jan Feb Mar Apl May Jun Jul Aug Sep Oct Nov Dec ";
strncpy( buf, week+pt->tm_wday*4, 4 );
strncpy( buf+4, month+pt->tm_mon*4, 4 );
sprintf( buf+8, "%02d ", pt->tm_mday );
sprintf( buf+11, "%02d:%02d:%02d %d\n",
pt->tm_hour, pt->tm_min, pt->tm_sec, pt->tm_year+1900 );
return buf;
}
void tzset()
{
daylight = 1;
_timezone = 28800;
timezone = 28800;
}
int clock(void)
{
return 1;
}
//---------------------------------------------------------------
#ifdef __SCRATCH_TIMEC_DEBUG__
int main()
{
time_t t1, t2;
struct tm tm1, tm2;
time( &t1 );
tm1 = *localtime(&t1);
t1 = mktime(&tm1);
tm1 = *gmtime(&t1);
_time( &t2 );
tm2 = *_localtime(&t2);
t2 = _mktime(&tm2);
tm2 = *_gmtime(&t2);
// time, mktime
if( t1==t2 )
OutputDebugString( "ok\n" );
else
{
static char buf[128];
wsprintf( buf, "ng : %d, %d\n", t1, t2 );
OutputDebugString( buf );
}
// localtime, gmtime
if( 0==memcmp( &tm1, &tm2, sizeof(struct tm) ) )
OutputDebugString( "ok\n" );
else
OutputDebugString( "ng\n" );
// ctime
OutputDebugString( ctime(&t1) );
OutputDebugString( _ctime(&t2) );
// asctime
OutputDebugString( asctime(&tm1) );
OutputDebugString( _asctime(&tm2) );
return 0;
}
#endif

63
wince/time.h Normal file
View file

@ -0,0 +1,63 @@
#ifndef TIME_H
#define TIME_H 1
#include <winbase.h>
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
extern int daylight;
extern int _timezone, timezone;
extern char *tzname[2];
#if 0
#define _DAY_SEC (24L * 60L * 60L) /* secs in a day */
#define _YEAR_SEC (365L * _DAY_SEC) /* secs in a year */
#define _FOUR_YEAR_SEC (1461L * _DAY_SEC) /* secs in a 4 year interval */
#define _DEC_SEC 315532800L /* secs in 1970-1979 */
#define _BASE_YEAR 70L /* 1970 is the base year */
#define _BASE_DOW 4 /* 01-01-70 was a Thursday */
#define _LEAP_YEAR_ADJUST 17L /* Leap years 1900 - 1970 */
#define _MAX_YEAR 138L /* 2038 is the max year */
#endif
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
#define _TM_DEFINED
#endif
typedef struct {
int yr; // year of interest
int yd; // day of year
long ms; // milli-seconds in the day
} transitionTime;
time_t mktime(struct tm* pt);
time_t time( time_t *timer );
struct tm *localtime(const time_t *ptime);
struct tm *gmtime(const time_t *tod);
char* ctime( const time_t *t );
char* asctime(const struct tm *tptr);
void tzset();
int clock(void);
time_t wce_FILETIME2time_t(const FILETIME* pf);
#ifdef __cplusplus
};
#endif
#endif

34
wince/varargs.h Normal file
View file

@ -0,0 +1,34 @@
#ifndef VARARGS_H
#define VARARGS_H 1
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _VA_LIST_DEFINED
typedef char *va_list;
#define _VA_LIST_DEFINED
#endif
//#ifdef MIPS
#define va_alist __va_alist, __va_alist2, __va_alist3, __va_alist4
#define va_dcl int __va_alist, __va_alist2, __va_alist3, __va_alist4;
#define va_start(list) list = (char *) &__va_alist
#define va_end(list)
#define va_arg(list, mode) ((mode *)(list =\
(char *) ((((int)list + (__builtin_alignof(mode)<=4?3:7)) &\
(__builtin_alignof(mode)<=4?-4:-8))+sizeof(mode))))[-1]
#else
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_dcl va_list va_alist;
#define va_start(ap) ap = (va_list)&va_alist
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ap = (va_list)0
//#endif
#ifdef __cplusplus
}
#endif
#endif

535
wince/wince.c Normal file
View file

@ -0,0 +1,535 @@
/***************************************************************
wince.c
author : uema2
date : Nov 30, 2002
You can freely use, copy, modify, and redistribute
the whole contents.
***************************************************************/
#include <windows.h>
#include <tchar.h>
#include "wince.h"
/* global for GetCommandLineA */
char *_commandLine;
/* make up Win32API except wce_* functions. */
DWORD GetModuleFileNameA(
HMODULE hModule, LPSTR lpFileName,
DWORD size )
{
LPWSTR lpFileNameW;
LPSTR mb;
size_t len;
lpFileNameW = (LPWSTR)malloc( size*sizeof(wchar_t) );
GetModuleFileNameW( hModule, lpFileNameW, size );
mb = wce_wctomb(lpFileNameW);
len = min(strlen(mb),size);
strncpy(lpFileName, mb, len);
lpFileName[len-1] = '\0';
free(mb);
free(lpFileNameW);
return 0;
}
#if _WIN32_WCE < 300
FARPROC GetProcAddressA(HMODULE hModule, LPCSTR lpProcName)
{
FARPROC p;
LPWSTR lpwProcName;
lpwProcName = wce_mbtowc( lpProcName );
p = GetProcAddressW( hModule, lpwProcName );
free( lpwProcName );
return p;
}
#endif
char * GetCommandLineA(void)
{
return _commandLine;
}
/* this is not Win32API. GetCommandLineA helper. */
void wce_SetCommandLine(LPCWSTR wcmd)
{
char* acmd;
acmd = wce_wctomb( wcmd );
_commandLine = (char*)malloc( strlen(acmd)+5 );
sprintf( _commandLine, "ruby %s", acmd );
free(acmd);
}
/* this is not Win32API. GetCommandLineA helper. */
void wce_FreeCommandLine(void)
{
free(_commandLine);
_commandLine = NULL;
}
/* I have no idea how to replace this. */
BOOL GetProcessTimes(HANDLE hprocess,
LPFILETIME lpCreationTime, LPFILETIME lpExitTime,
LPFILETIME lpKernelTime, LPFILETIME lpUserTime)
{
return 0;
}
/* -------------- file attributes functions. ------------------- */
DWORD GetFileAttributesA(LPCSTR lpFileName)
{
LPWSTR lpwFileName;
DWORD dw;
lpwFileName = wce_mbtowc(lpFileName);
dw = GetFileAttributesW(lpwFileName);
free(lpwFileName);
return dw;
}
BOOL SetFileAttributesA(
LPCSTR lpFileName, DWORD attributes)
{
LPWSTR lpwFileName;
BOOL b;
lpwFileName = wce_mbtowc(lpFileName);
b = SetFileAttributesW(lpwFileName, attributes);
free(lpwFileName);
return b;
}
/* --------------- move and remove functions. ------------------- */
BOOL MoveFileA(LPCSTR fn1, LPCSTR fn2)
{
LPWSTR wfn1, wfn2;
BOOL b;
wfn1 = wce_mbtowc(fn1);
wfn2 = wce_mbtowc(fn2);
b = MoveFileW(wfn1, wfn2);
free(wfn1);
free(wfn2);
return 0;
}
BOOL MoveFileEx(LPCSTR oldname, LPCSTR newname, DWORD dwFlags)
{
LPWSTR woldname, wnewname;
BOOL b;
woldname = wce_mbtowc(oldname);
wnewname = wce_mbtowc(newname);
if( (dwFlags&MOVEFILE_REPLACE_EXISTING)!=0 )
DeleteFileW( wnewname );
b = MoveFileW( woldname, wnewname );
free(woldname);
free(wnewname);
return b;
}
BOOL DeleteFileA(LPCSTR path)
{
LPWSTR wpath;
BOOL b;
wpath = wce_mbtowc(path);
b = DeleteFileW(wpath);
free(wpath);
return 0;
}
/* --------------- EnvironmentVariable functions. ----------------- */
DWORD GetEnvironmentVariable(
LPCSTR name, LPSTR value, DWORD size)
{
/* use registry instead of "environment valuable". */
HKEY hk;
LONG lret;
LPBYTE lpData;
DWORD dwType=REG_SZ, cbData;
TCHAR buf[MAX_PATH]={0};
LPWSTR wname;
LPSTR avalue;
lret = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
_T("Software\\ruby_mswince"),
0, KEY_QUERY_VALUE, &hk );
if ( lret != ERROR_SUCCESS )
{
strcpy( value, "" );
return 0;
}
lpData = (LPBYTE)buf;
cbData = MAX_PATH*sizeof(*buf);
wname = wce_mbtowc( name );
lret = RegQueryValueEx( hk, wname,
NULL, &dwType, lpData, &cbData );
RegCloseKey( hk );
if ( lret != ERROR_SUCCESS )
{
strcpy( value, "" );
free( wname );
return 0;
}
avalue = wce_wctomb( (LPCTSTR)lpData );
strcpy( value, avalue );
free( avalue );
free( wname );
return strlen(value);
}
BOOL SetEnvironmentVariable(LPCSTR name, LPCSTR value)
{
/* use registry instead of "environment valuable". */
HKEY hk;
LONG lret;
LPBYTE lpData;
DWORD ret, dwType=REG_SZ, cbData;
LPWSTR wname, wvalue;
lret = RegCreateKeyEx( HKEY_LOCAL_MACHINE,
_T("Software\\ruby_mswince"),
0, _T(""), 0,
0, NULL, &hk, &ret );
if( lret != ERROR_SUCCESS )
return FALSE;
wname = wce_mbtowc(name);
wvalue = wce_mbtowc(value);
lpData = (LPBYTE)wvalue;
cbData = (wcslen(wvalue) + 1) * sizeof(*wvalue);
lret = RegSetValueEx( hk, wname,
0, dwType, lpData, cbData );
RegCloseKey( hk );
free(wname);
free(wvalue);
return lret == ERROR_SUCCESS;
}
LPVOID GetEnvironmentStrings(VOID)
{
return NULL;
}
BOOL FreeEnvironmentStrings(LPSTR lpszEnvironmentBlock)
{
return FALSE;
}
/* DuplicateHandle, LockFile, etc... */
/* I have no idea... */
BOOL GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
DWORD dwProcessGroupID)
{
return 0;
}
BOOL DuplicateHandle(
HANDLE source_process, HANDLE source,
HANDLE dest_process, HANDLE *dest,
DWORD access, BOOL inherit, DWORD options)
{
return 0;
}
BOOL LockFile(HANDLE hFile,
DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh)
{
return FALSE;
}
BOOL LockFileEx(HANDLE hFile,
DWORD dwFlags, DWORD dwReserved,
DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh,
LPOVERLAPPED lpOverlapped)
{
return FALSE;
}
BOOL UnlockFile( HFILE hFile,
DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh)
{
return FALSE;
}
BOOL UnlockFileEx(HANDLE hFile,
DWORD dwReserved, DWORD nNumberOfBytesToUnlockLow,
DWORD nNumberOfBytesToUnlockHigh, LPOVERLAPPED lpOverlapped)
{
return FALSE;
}
/* --------------------- etc, etc, etc... ----------------------- */
BOOL GetVersionExA(OSVERSIONINFOA *v)
{
OSVERSIONINFOW wv;
BOOL b;
LPSTR mb;
b = GetVersionExW(&wv);
mb = wce_wctomb(wv.szCSDVersion);
strcpy( v->szCSDVersion, mb );
free(mb);
return b;
}
DWORD WaitForMultipleObjectsEx(DWORD count,
const HANDLE *handles, BOOL wait_all,
DWORD timeout, BOOL alertable)
{
return WaitForMultipleObjects(
count, handles, wait_all,
timeout );
}
BOOL CreateProcessA(LPCSTR appname, LPCSTR commandline,
LPSECURITY_ATTRIBUTES att, LPSECURITY_ATTRIBUTES threadatt,
BOOL bOpt, DWORD dwFlag, LPVOID lpEnv, LPSTR dir,
LPSTARTUPINFO lpsi, LPPROCESS_INFORMATION lppi)
{
LPWSTR wappname, wcommandline, wdir;
BOOL b;
wappname = wce_mbtowc(appname);
wcommandline = wce_mbtowc(commandline);
wdir = wce_mbtowc(dir);
b = CreateProcessW(wappname, wcommandline,
att, threadatt, bOpt, dwFlag, lpEnv,
wdir, lpsi, lppi);
free(wappname);
free(wcommandline);
free(wdir);
return b;
}
HANDLE CreateEventA(SECURITY_ATTRIBUTES *sa,
BOOL manual_reset, BOOL initial_state, LPCSTR name)
{
HANDLE h;
LPWSTR wname;
wname = wce_mbtowc(name);
h = CreateEventW(sa, manual_reset,
initial_state, wname);
free(wname);
return h;
}
DWORD FormatMessageA(DWORD dwFlags, LPCVOID lpSource,
DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer,
DWORD nSize, va_list* args)
{
DWORD dw;
LPWSTR lpWBuffer;
lpWBuffer = wce_mbtowc(lpBuffer);
dw = FormatMessageW( dwFlags, lpSource,
dwMessageId, dwLanguageId,
lpWBuffer, nSize, (va_list*)args );
free(lpWBuffer);
return dw;
}
/*---------------- FindFirstFile, FindNextFile ------------------ */
HANDLE FindFirstFileA(LPCSTR path,
WIN32_FIND_DATAA *data)
{
LPWSTR wpath;
LPSTR mb;
HANDLE h;
WIN32_FIND_DATAW wdata;
wpath = wce_mbtowc(path);
h = FindFirstFileW( wpath, &wdata );
free(wpath);
mb = wce_wctomb( wdata.cFileName );
strcpy( data->cFileName, mb );
free(mb);
return h;
}
BOOL FindNextFileA(HANDLE handle,
WIN32_FIND_DATAA *data)
{
BOOL b;
WIN32_FIND_DATAW wdata;
LPSTR mb1;
b = FindNextFileW(handle, &wdata);
mb1 = wce_wctomb( wdata.cFileName );
strcpy( data->cFileName, mb1 );
free(mb1);
return b;
}
/* CreateFile doesn't support SECURITY_ATTRIBUTES in WinCE. */
/* it must be NULL. */
HANDLE CreateFileA(LPCSTR filename, DWORD access,
DWORD sharing, LPSECURITY_ATTRIBUTES sa,
DWORD creation, DWORD attributes, HANDLE template)
{
LPWSTR wfilename;
HANDLE h;
wfilename = wce_mbtowc(filename);
h = CreateFileW(wfilename, access, sharing,
NULL, creation, 0, NULL);
free(wfilename);
return 0;
}
/* ---------------- CharNext, CharPrev. ---------------------*/
LPSTR CharNextA(LPCSTR a)
{
char *p=(char *)a;
if( TRUE==IsDBCSLeadByteEx(CP_ACP, (BYTE)*a) )
p+=2;
else
p++;
return p;
}
LPSTR CharPrevA(LPCSTR start, LPCSTR ptr)
{
if( start==ptr ) return (LPSTR)start;
else if( start+1==ptr ) return (LPSTR)start;
else if( TRUE==IsDBCSLeadByteEx(CP_ACP, (BYTE)*(ptr-2)) )
return (LPSTR)(ptr-2);
else
return (LPSTR)(ptr-1);
}
/* WinCE doesn't have "drives". */
DWORD GetLogicalDrives(VOID)
{
return 0;
}
/* WinCE doesn't have "user name". */
BOOL GetUserName(LPSTR lpBuffer, LPDWORD nSize)
{
return 0;
}
/*------------------- LoadLibrary -----------------------*/
HINSTANCE LoadLibraryA(LPCSTR libname)
{
HINSTANCE h;
LPWSTR wlibname;
wlibname = wce_mbtowc(libname);
h = LoadLibraryW(wlibname);
free(wlibname);
return h;
}
HINSTANCE LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile,
DWORD dwFlags)
{
HINSTANCE h;
LPWSTR wlibname;
wlibname = wce_mbtowc(lpLibFileName);
#if _WIN32_WCE < 300
h = LoadLibraryW(wlibname);
#else
h = LoadLibraryExW(wlibname, hFile, dwFlags);
#endif
free(wlibname);
return h;
}
/* WinCE doesn't have "CreatePipe". */
BOOL CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe,
LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize)
{
return FALSE;
}
/* WinCE doesn't have "Standard Devices". */
HANDLE GetStdHandle(DWORD nStdHandle)
{
return NULL;
}
BOOL SetStdHandle(DWORD nStdHandle, HANDLE h)
{
return FALSE;
}
#if _WIN32_WCE < 300
VOID ZeroMemory(PVOID p, DWORD length)
{
memset(p,0,length);
}
#endif
/* need in ruby/io.c. */
int ReadDataPending()
{
return 0;
}
/*---------------- helper functions. ---------------------------- */
/* char -> wchar_t */
wchar_t* wce_mbtowc(const char* a)
{
int length;
wchar_t *wbuf;
length = MultiByteToWideChar(CP_ACP, 0,
a, -1, NULL, 0);
wbuf = (wchar_t*)malloc( (length+1)*sizeof(wchar_t) );
MultiByteToWideChar(CP_ACP, 0,
a, -1, wbuf, length);
return wbuf;
}
/* wchar_t -> char */
char* wce_wctomb(const wchar_t* w)
{
DWORD charlength;
char* pChar;
charlength = WideCharToMultiByte(CP_ACP, 0, w,
-1, NULL, 0, NULL, NULL);
pChar = (char*)malloc(charlength+1);
WideCharToMultiByte(CP_ACP, 0, w,
-1, pChar, charlength, NULL, NULL);
return pChar;
}

216
wince/wince.h Normal file
View file

@ -0,0 +1,216 @@
#ifndef _EXT_CE_
#define _EXT_CE_
/* unique difinition in wince platform. */
#ifndef _MIPS_
#define CONTEXT_FLOATING_POINT 0x00000002L
#endif
/* LockFile difinition. */
#define LOCKFILE_FAIL_IMMEDIATELY 0x00000001
#define LOCKFILE_EXCLUSIVE_LOCK 0x00000002
/* Dual Mode difinition. */
#define STARTF_USESHOWWINDOW 0x00000001
#define STARTF_USESIZE 0x00000002
#define STARTF_USEPOSITION 0x00000004
#define STARTF_USECOUNTCHARS 0x00000008
#define STARTF_USEFILLATTRIBUTE 0x00000010
#define STARTF_RUNFULLSCREEN 0x00000020
#define STARTF_FORCEONFEEDBACK 0x00000040
#define STARTF_FORCEOFFFEEDBACK 0x00000080
#define STARTF_USESTDHANDLES 0x00000100
/* #define STARTF_USEHOTKEY 0x00000200 */
#define STD_INPUT_HANDLE (DWORD)-10
#define STD_OUTPUT_HANDLE (DWORD)-11
#define STD_ERROR_HANDLE (DWORD)-12
#define NORMAL_PRIORITY_CLASS 0x00000020
#define IDLE_PRIORITY_CLASS 0x00000040
#define HIGH_PRIORITY_CLASS 0x00000080
#define REALTIME_PRIORITY_CLASS 0x00000100
/* WINSOCK.H? */
#define SO_SYNCHRONOUS_NONALERT 0x20
/* MoveFileEx definition. */
#define MOVEFILE_REPLACE_EXISTING 0x00000001
/*
#define MOVEFILE_COPY_ALLOWED 0x00000002
#define MOVEFILE_DELAY_UNTIL_REBOOT 0x00000004
#define MOVEFILE_WRITE_THROUGH 0x00000008
#define MOVEFILE_CREATE_HARDLINK 0x00000010
#define MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x00000020
*/
#define _fgetc fgetc
#define _fputc fputc
#ifdef __cplusplus
extern "C" {
#endif
/* Win32 API redifinition. */
#ifdef GetCommandLine
#undef GetCommandLine
#define GetCommandLine GetCommandLineA
#else
#define GetCommandLine GetCommandLineA
#endif
#ifdef SetFileAttributes
#undef SetFileAttributes
#define SetFileAttributes SetFileAttributesA
#endif
#ifdef GetFileAttributes
#undef GetFileAttributes
#define GetFileAttributes GetFileAttributesA
#endif
#ifdef FormatMessage
#undef FormatMessage
#define FormatMessage FormatMessageA
#endif
#ifdef GetModuleFileName
#undef GetModuleFileName
#define GetModuleFileName GetModuleFileNameA
#endif
#ifdef CreateFile
#undef CreateFile
#define CreateFile CreateFileA
#endif
#ifdef MoveFile
#undef MoveFile
#define MoveFile MoveFileA
#endif
#ifdef DeleteFile
#undef DeleteFile
#define DeleteFile DeleteFileA
#endif
#ifdef CreateProcess
#undef CreateProcess
#define CreateProcess CreateProcessA
#endif
#ifdef CharNext
#undef CharNext
#define CharNext CharNextA
#endif
#ifdef CharPrev
#undef CharPrev
#define CharPrev CharPrevA
#endif
#ifdef WIN32_FIND_DATA
#undef WIN32_FIND_DATA
#define WIN32_FIND_DATA WIN32_FIND_DATAA
#endif
#ifdef FindFirstFile
#undef FindFirstFile
#define FindFirstFile FindFirstFileA
#endif
#ifdef FindNextFile
#undef FindNextFile
#define FindNextFile FindNextFileA
#endif
/* stdio.c */
FILE *freopen(const char *filename, const char *mode, FILE *file);
FILE *_fdopen( int handle, const char *mode );
#define fdopen _fdopen
/* stdlib.c */
char *getenv(const char *charstuff);
char *_fullpath(char *absPath, const char *relPath, size_t maxLength);
/* string.c */
char *strdup(const char * str);
/* char *strerror(int errno); */
int _strnicmp( const char *s1, const char *s2, size_t count );
#define strnicmp _strnicmp
/* for win32.c */
BOOL MoveFileEx(LPCSTR oldname, LPCSTR newname, DWORD dwFlags);
BOOL DuplicateHandle(
HANDLE source_process, HANDLE source,
HANDLE dest_process, HANDLE *dest,
DWORD access, BOOL inherit, DWORD options);
BOOL LockFile(HANDLE hFile,
DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);
BOOL LockFileEx(HANDLE hFile,
DWORD dwFlags, DWORD dwReserved,
DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh,
LPOVERLAPPED lpOverlapped);
BOOL UnlockFile( HFILE hFile,
DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh);
BOOL UnlockFileEx(HANDLE hFile,
DWORD dwReserved, DWORD nNumberOfBytesToUnlockLow,
DWORD nNumberOfBytesToUnlockHigh, LPOVERLAPPED lpOverlapped);
BOOL GetUserName(LPSTR lpBuffer, LPDWORD nSize);
BOOL CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe,
LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize);
HANDLE GetStdHandle(DWORD nStdHandle);
BOOL SetStdHandle(DWORD nStdHandle, HANDLE h);
DWORD GetLogicalDrives(VOID);
DWORD WaitForMultipleObjectsEx(DWORD count,
const HANDLE *handles, BOOL wait_all,
DWORD timeout, BOOL alertable);
DWORD GetEnvironmentVariable(LPCSTR name, LPSTR value, DWORD size);
LPVOID GetEnvironmentStrings(VOID);
BOOL FreeEnvironmentStrings(LPSTR lpszEnvironmentBlock);
BOOL GenerateConsoleCtrlEvent(DWORD dwCtrlEvent,
DWORD dwProcessGroupID);
BOOL GetProcessTimes(HANDLE hprocess,
LPFILETIME lpCreationTime, LPFILETIME lpExitTime,
LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
/* char -> wchar_t, wchar_t -> char */
wchar_t* wce_mbtowc(const char* a);
char* wce_wctomb(const wchar_t* w);
/* other helpers. */
void wce_SetCommandLine(LPCWSTR wcmd);
void wce_FreeCommandLine(void);
#if _WIN32_WCE < 300
/* for Handheld PC Pro. */
char *strrchr( const char *p, int c );
int _stricmp( const char *p1, const char *p2 );
VOID ZeroMemory(PVOID p, DWORD length);
#define isascii(c) ( (c>=0x00&&c<=0x7f)?1:0 )
#define isspace(c) ( ((c>=0x09&&c<=0x0d)||c==0x20)?1:0 )
#define isdigit(c) ( (c>=0x00&&c<=0x09)?1:0 )
#define isupper(c) ( (c>='A'&&c<='Z')?1:0 )
#define isalpha(c) ( ((c>='A'&&c<='Z')||(c>='a'&&c<='z'))?1:0 )
#define isprint(c) ( (c>=0x20&&c<=0x7e)?1:0 )
#define isalnum(c) ( (isalpha(c)||isdigit(c))?1:0 )
#define iscntrl(c) ( ((c>=0x00&&c<=0x1f)||c==0x7f)?1:0 )
#define islower(c) ( (c>='a'&&c<='z')?1:0 )
#define ispunct(c) ( !(isalnum(c)||isspace(c))?1:0 )
#define isxdigit(c) ( ((c>=0&&c<=9)||(c>='A'&&c<='F')||(c>='a'&&c<='f'))?1:0 )
#endif
#ifdef __cplusplus
};
#endif
#endif /* _EXT_CE_ */

16
wince/wincemain.c Normal file
View file

@ -0,0 +1,16 @@
#include <windows.h>
#include <stdio.h>
#include "wince.h"
extern int main(int, char**, char**);
int WINAPI
WinMain(HINSTANCE current, HINSTANCE prev, LPWSTR wcmd, int showcmd)
{
/* wchar_t -> char */
wce_SetCommandLine(wcmd);
/* main. */
return main(0, NULL, NULL);
}

7
wince/wincon.h Normal file
View file

@ -0,0 +1,7 @@
#ifndef _WINCON_H_
#define _WINCON_H_
#define CTRL_C_EVENT 0
#endif

338
wince/winsock2.c Normal file
View file

@ -0,0 +1,338 @@
/***************************************************************
winsock2.c
***************************************************************/
//#define _WINSOCK2_C_DEBUG_MAIN_
#include <windows.h>
#include "wince.h"
#ifdef _WINSOCK2_C_DEBUG_MAIN_
#include <winsock.h>
#endif
#ifndef _WINSOCK2_C_DEBUG_MAIN_
struct servent{
char* s_name; /* official service name */
char** s_aliases; /* alias list */
short s_port; /* port # */
char* s_proto; /* protocol to use */
};
struct protoent{
char* p_name; /* official protocol name */
char** p_aliases; /* alias list */
short p_proto; /* protocol # */
};
#endif
struct sproto{
short num;
char name[10];
};
struct sserv{
short num;
char protoname[10];
char servname[20];
};
static struct sproto _proto_table[11]={
0, "ip",
1, "icmp",
3, "ggp",
6, "tcp",
8, "egp",
12, "pup",
17, "udp",
20, "hmp",
22, "xns-idp",
27, "rdp",
66, "rvd",
};
static struct sserv _serv_table[142]={
7, "tcp", "echo",
7, "udp", "echo",
9, "tcp", "discard",
9, "udp", "discard",
11, "tcp", "systat",
11, "udp", "systat",
13, "tcp", "daytime",
13, "udp", "daytime",
15, "tcp", "netstat",
17, "tcp", "qotd",
17, "udp", "qotd",
19, "tcp", "chargen",
19, "udp", "chargen",
20, "tcp", "ftp-data",
21, "tcp", "ftp",
23, "tcp", "telnet",
25, "tcp", "smtp",
37, "tcp", "time",
37, "udp", "time",
39, "udp", "rlp",
42, "tcp", "name",
42, "udp", "name",
43, "tcp", "whois",
53, "tcp", "domain",
53, "udp", "domain",
53, "tcp", "nameserver",
53, "udp", "nameserver",
57, "tcp", "mtp",
67, "udp", "bootp",
69, "udp", "tftp",
77, "tcp", "rje",
79, "tcp", "finger",
87, "tcp", "link",
95, "tcp", "supdup",
101, "tcp", "hostnames",
102, "tcp", "iso-tsap",
103, "tcp", "dictionary",
103, "tcp", "x400",
104, "tcp", "x400-snd",
105, "tcp", "csnet-ns",
109, "tcp", "pop",
109, "tcp", "pop2",
110, "tcp", "pop3",
111, "tcp", "portmap",
111, "udp", "portmap",
111, "tcp", "sunrpc",
111, "udp", "sunrpc",
113, "tcp", "auth",
115, "tcp", "sftp",
117, "tcp", "path",
117, "tcp", "uucp-path",
119, "tcp", "nntp",
123, "udp", "ntp",
137, "udp", "nbname",
138, "udp", "nbdatagram",
139, "tcp", "nbsession",
144, "tcp", "NeWS",
153, "tcp", "sgmp",
158, "tcp", "tcprepo",
161, "tcp", "snmp",
162, "tcp", "snmp-trap",
170, "tcp", "print-srv",
175, "tcp", "vmnet",
315, "udp", "load",
400, "tcp", "vmnet0",
500, "udp", "sytek",
512, "udp", "biff",
512, "tcp", "exec",
513, "tcp", "login",
513, "udp", "who",
514, "tcp", "shell",
514, "udp", "syslog",
515, "tcp", "printer",
517, "udp", "talk",
518, "udp", "ntalk",
520, "tcp", "efs",
520, "udp", "route",
525, "udp", "timed",
526, "tcp", "tempo",
530, "tcp", "courier",
531, "tcp", "conference",
531, "udp", "rvd-control",
532, "tcp", "netnews",
533, "udp", "netwall",
540, "tcp", "uucp",
543, "tcp", "klogin",
544, "tcp", "kshell",
550, "udp", "new-rwho",
556, "tcp", "remotefs",
560, "udp", "rmonitor",
561, "udp", "monitor",
600, "tcp", "garcon",
601, "tcp", "maitrd",
602, "tcp", "busboy",
700, "udp", "acctmaster",
701, "udp", "acctslave",
702, "udp", "acct",
703, "udp", "acctlogin",
704, "udp", "acctprinter",
704, "udp", "elcsd",
705, "udp", "acctinfo",
706, "udp", "acctslave2",
707, "udp", "acctdisk",
750, "tcp", "kerberos",
750, "udp", "kerberos",
751, "tcp", "kerberos_master",
751, "udp", "kerberos_master",
752, "udp", "passwd_server",
753, "udp", "userreg_server",
754, "tcp", "krb_prop",
888, "tcp", "erlogin",
1109, "tcp", "kpop",
1167, "udp", "phone",
1524, "tcp", "ingreslock",
1666, "udp", "maze",
2049, "udp", "nfs",
2053, "tcp", "knetd",
2105, "tcp", "eklogin",
5555, "tcp", "rmt",
5556, "tcp", "mtb",
9535, "tcp", "man",
9536, "tcp", "w",
9537, "tcp", "mantst",
10000, "tcp", "bnews",
10000, "udp", "rscs0",
10001, "tcp", "queue",
10001, "udp", "rscs1",
10002, "tcp", "poker",
10002, "udp", "rscs2",
10003, "tcp", "gateway",
10003, "udp", "rscs3",
10004, "tcp", "remp",
10004, "udp", "rscs4",
10005, "udp", "rscs5",
10006, "udp", "rscs6",
10007, "udp", "rscs7",
10008, "udp", "rscs8",
10009, "udp", "rscs9",
10010, "udp", "rscsa",
10011, "udp", "rscsb",
10012, "tcp", "qmaster",
10012, "udp", "qmaster",
};
/* WinCE doesn't have /etc/protocols. */
struct protoent* getprotobyname(const char* name)
{
static struct protoent pe;
int i;
int len = strlen(name);
memset( &pe, 0, sizeof(struct protoent) );
for(i=0; i<9; i++)
{
if( 0==strnicmp(_proto_table[i].name, name, len) )
{
pe.p_name = _proto_table[i].name;
pe.p_proto= _proto_table[i].num;
break;
}
}
return &pe;
}
struct protoent* getprotobynumber(int proto)
{
static struct protoent pe={0};
int i;
memset( &pe, 0, sizeof(struct protoent) );
for(i=0; i<9; i++)
{
if( proto == _proto_table[i].num )
{
pe.p_name = _proto_table[i].name;
pe.p_proto= _proto_table[i].num;
break;
}
}
return &pe;
}
/* WinCE doesn't have /etc/services. */
struct servent* getservbyname(const char* name,
const char* proto)
{
static struct servent se;
int i;
int slen = strlen(name), plen = strlen(proto);
memset( &se, 0, sizeof(struct servent) );
if( proto==NULL ) return NULL;
if( 0!=strnicmp( proto, "tcp", 3 ) &&
0!=strnicmp( proto, "udp", 3 ) )
return NULL;
for( i=0; i<142; i++ )
{
if( 0==strnicmp( name, _serv_table[i].servname, slen ) &&
0==strnicmp( proto, _serv_table[i].protoname, plen ) )
{
char hc, lc;
se.s_name = _serv_table[i].servname;
se.s_proto= _serv_table[i].protoname;
hc = (_serv_table[i].num&0xFF00)>>8;
lc = _serv_table[i].num&0xFF;
se.s_port = (lc<<8) + hc;
break;
}
}
return &se;
}
struct servent* getservbyport(int port, const char* proto)
{
static struct servent se;
int i;
int plen = strlen(proto);
short sport;
char lc, hc;
hc = (port&0xFF00)>>8;
lc = port&0xFF;
sport = (lc<<8) + hc;
memset( &se, 0, sizeof(struct servent) );
if( proto==NULL ) return NULL;
if( 0!=strnicmp( proto, "tcp", 3 ) &&
0!=strnicmp( proto, "udp", 3 ) )
return NULL;
for( i=0; i<142; i++ )
{
if( sport == _serv_table[i].num &&
0==strnicmp( proto, _serv_table[i].protoname, plen ) )
{
se.s_name = _serv_table[i].servname;
se.s_proto= _serv_table[i].protoname;
se.s_port = port;
break;
}
}
return &se;
}
#ifdef _WINSOCK2_C_DEBUG_MAIN_
int main()
{
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
int nErrorStatus;
struct protoent pe1, pe2;
struct servent se1, se2;
nErrorStatus = WSAStartup(wVersionRequested, &wsaData);
if(nErrorStatus != 0)
return -1;
pe1 = *getprotobyname("UDP");
pe2 = *_getprotobyname("UDP");
// pe1 = *getprotobynumber(17);
// pe2 = *_getprotobynumber(17);
// se1 = *getservbyname("gateway", "tcp");
// se2 = *_getservbyname("gateway", "tcp");
se1 = *getservbyport(0x1327, "tcp");
se2 = *_getservbyport(0x1327, "tcp");
WSACleanup();
return 0;
}
#endif