📄 _win16.h
字号:
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- *//* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is the Netscape Portable Runtime (NSPR). * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998-2000 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL"), in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your * version of this file only under the terms of the GPL and not to * allow others to use your version of this file under the MPL, * indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient * may use your version of this file under either the MPL or the * GPL. */#ifndef nspr_win16_defs_h___#define nspr_win16_defs_h___#include <windows.h>#include <winsock.h>#include <errno.h>#include <direct.h>#include "nspr.h"/* $$ fix this */#define Remind(x)/* * Internal configuration macros */#define PR_LINKER_ARCH "win16"#define _PR_SI_SYSNAME "WIN16"#define _PR_SI_ARCHITECTURE "x86" /* XXXMB hardcode for now */#define HAVE_DLL#define _PR_NO_PREEMPT#define _PR_LOCAL_THREADS_ONLY#undef _PR_GLOBAL_THREADS_ONLY#undef HAVE_THREAD_AFFINITY#define _PR_HAVE_ATOMIC_OPS/* --- Common User-Thread/Native-Thread Definitions --------------------- */extern struct PRLock *_pr_schedLock;extern char * _pr_top_of_task_stack;/* --- Typedefs --- */#define PR_NUM_GCREGS 9typedef PRInt32 PR_CONTEXT_TYPE[PR_NUM_GCREGS];#define _MD_MAGIC_THREAD 0x22222222#define _MD_MAGIC_THREADSTACK 0x33333333#define _MD_MAGIC_SEGMENT 0x44444444#define _MD_MAGIC_DIR 0x55555555#define _MD_MAGIC_CV 0x66666666typedef struct _PRWin16PollDesc{ PRInt32 osfd; PRInt16 in_flags; PRInt16 out_flags;} _PRWin16PollDesc;typedef struct PRPollQueue{ PRCList links; /* for linking PRPollQueue's together */ _PRWin16PollDesc *pds; /* array of poll descriptors */ PRUintn npds; /* length of the array */ PRPackedBool on_ioq; /* is this on the async i/o work q? */ PRIntervalTime timeout; /* timeout, in ticks */ struct PRThread *thr;} PRPollQueue;#define _PR_POLLQUEUE_PTR(_qp) \ ((PRPollQueue *) ((char*) (_qp) - offsetof(PRPollQueue,links)))NSPR_API(PRInt32) _PR_WaitForFD(PRInt32 osfd, PRUintn how, PRIntervalTime timeout);NSPR_API(void) _PR_Unblock_IO_Wait(struct PRThread *thr);#define _PR_MD_MAX_OSFD FD_SETSIZE#define _PR_IOQ(_cpu) ((_cpu)->md.ioQ)#define _PR_ADD_TO_IOQ(_pq, _cpu) PR_APPEND_LINK(&_pq.links, &_PR_IOQ(_cpu))#define _PR_FD_READ_SET(_cpu) ((_cpu)->md.fd_read_set)#define _PR_FD_READ_CNT(_cpu) ((_cpu)->md.fd_read_cnt)#define _PR_FD_WRITE_SET(_cpu) ((_cpu)->md.fd_write_set)#define _PR_FD_WRITE_CNT(_cpu) ((_cpu)->md.fd_write_cnt)#define _PR_FD_EXCEPTION_SET(_cpu) ((_cpu)->md.fd_exception_set)#define _PR_FD_EXCEPTION_CNT(_cpu) ((_cpu)->md.fd_exception_cnt)#define _PR_IOQ_TIMEOUT(_cpu) ((_cpu)->md.ioq_timeout)#define _PR_IOQ_MAX_OSFD(_cpu) ((_cpu)->md.ioq_max_osfd)struct _MDCPU { PRCList ioQ; fd_set fd_read_set, fd_write_set, fd_exception_set; PRInt16 fd_read_cnt[_PR_MD_MAX_OSFD],fd_write_cnt[_PR_MD_MAX_OSFD], fd_exception_cnt[_PR_MD_MAX_OSFD]; PRUint32 ioq_timeout; PRInt32 ioq_max_osfd;};struct _MDThread { /* The overlapped structure must be first! */ HANDLE blocked_sema; /* Threads block on this when waiting * for IO or CondVar. */ PRInt32 errcode; /* preserved errno for this thread */ CATCHBUF context; /* thread context for Throw() */ void *SP; /* Stack pointer, used only by GarbColl */ int threadNumber; /* instrumentation: order of creation */ _PRWin16PollDesc thr_pd; /* poll descriptor for i/o */ PRPollQueue thr_pq; /* i/o parameters */ void *exceptionContext; /* mfc exception context */ char guardBand[24]; /* don't overwrite this */ PRUint32 magic; /* self identifier, for debug */};struct _MDThreadStack { PRUint32 magic; /* for debugging */ PRIntn cxByteCount; /* number of stack bytes to move */ char * stackTop; /* high address on stack */};struct _MDSegment { PRUint32 magic; /* for debugging */};struct _MDLock { PRUint32 magic; /* for debugging */ PRUint32 mutex;};struct _MDDir { PRUint32 magic; /* for debugging */ struct dirent *dir;};struct _MDCVar { PRUint32 magic;};struct _MDSemaphore { PRInt32 unused;};struct _MDFileDesc { PRInt32 osfd;};struct _MDProcess { HANDLE handle; DWORD id;};/*** Microsoft 'struct _stat'** ... taken directly from msvc 1.52c's header file sys/stat.h** see PR_Stat() implemented in w16io.c** See BugSplat: 98516*/#pragma pack(push)#pragma pack(2)typedef unsigned short _ino_t;typedef short _dev_t;typedef long _off_t;typedef struct _MDMSStat { _dev_t st_dev; _ino_t st_ino; unsigned short st_mode; short st_nlink; short st_uid; short st_gid; _dev_t st_rdev; _off_t st_size; time_t st_atime; time_t st_mtime; time_t st_ctime;} _MDMSStat;#pragma pack(pop)/* --- Errors --- */ /* These are NSPR generated error codes which need to be unique from * OS error codes. */#define _MD_UNIQUEBASE 50000#define _MD_EINTERRUPTED _MD_UNIQUEBASE + 1#define _MD_ETIMEDOUT _MD_UNIQUEBASE + 2#define _MD_EIO _MD_UNIQUEBASE + 3struct PRProcess;struct PRProcessAttr;/* --- Create a new process --- */#define _MD_CREATE_PROCESS _PR_CreateWindowsProcessextern struct PRProcess * _PR_CreateWindowsProcess( const char *path, char *const *argv, char *const *envp, const struct PRProcessAttr *attr);#define _MD_DETACH_PROCESS _PR_DetachWindowsProcessextern PRStatus _PR_DetachWindowsProcess(struct PRProcess *process);/* --- Wait for a child process to terminate --- */#define _MD_WAIT_PROCESS _PR_WaitWindowsProcessextern PRStatus _PR_WaitWindowsProcess(struct PRProcess *process, PRInt32 *exitCode);#define _MD_KILL_PROCESS _PR_KillWindowsProcessextern PRStatus _PR_KillWindowsProcess(struct PRProcess *process);/* --- Misc stuff --- */#define MD_ASSERTINT( x ) PR_ASSERT( (x) < 65535 )/* --- IO stuff --- */#define MAX_PATH 256#define _MD_ERRNO() errno#define GetLastError() errno#define _MD_GET_FILE_ERROR() errno#define _MD_SET_FILE_ERROR(_err) errno = (_err)#define _MD_OPEN _PR_MD_OPEN#define _MD_READ _PR_MD_READ#define _MD_WRITE _PR_MD_WRITE#define _MD_WRITEV _PR_MD_WRITEV#define _MD_LSEEK _PR_MD_LSEEK#define _MD_LSEEK64 _PR_MD_LSEEK64#define _MD_CLOSE_FILE _PR_MD_CLOSE_FILE#define _MD_GETFILEINFO _PR_MD_GETFILEINFO#define _MD_GETOPENFILEINFO _PR_MD_GETOPENFILEINFO#define _MD_STAT _PR_MD_STAT#define _MD_RENAME _PR_MD_RENAME #define _MD_ACCESS _PR_MD_ACCESS #define _MD_DELETE _PR_MD_DELETE #define _MD_MKDIR _PR_MD_MKDIR #define _MD_RMDIR _PR_MD_RMDIR #define _MD_LOCKFILE _PR_MD_LOCKFILE#define _MD_TLOCKFILE _PR_MD_TLOCKFILE#define _MD_UNLOCKFILE _PR_MD_UNLOCKFILE/* --- Socket IO stuff --- */#define _MD_EACCES WSAEACCES#define _MD_EADDRINUSE WSAEADDRINUSE#define _MD_EADDRNOTAVAIL WSAEADDRNOTAVAIL#define _MD_EAFNOSUPPORT WSAEAFNOSUPPORT#define _MD_EAGAIN WSAEWOULDBLOCK#define _MD_EALREADY WSAEALREADY#define _MD_EBADF WSAEBADF#define _MD_ECONNREFUSED WSAECONNREFUSED#define _MD_ECONNRESET WSAECONNRESET#define _MD_EFAULT WSAEFAULT#define _MD_EINPROGRESS WSAEINPROGRESS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -