1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-16 00:01:05 -08:00
emacs/src/w32.h
Jason Rumney 52c7f9eea2 2004-11-08 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
* w32select.c: Summary: Thorough rework to implement Unicode
        clipboard operations and delayed rendering.

        Drop last_clipboard_text and related code, keep track of
        ownership via clipboard_owner instead.  Drop old #if0
        sections.

        (DEFAULT_LCID, ANSICP, OEMCP, QUNICODE, QANSICP, QOEMCP)
        (clipboard_owner, modifying_clipboard, cfg_coding_system)
        (cfg_codepage, cfg_lcid, cfg_clipboard_type, current_text)
        (current_coding_system, current_requires_encoding)
        (current_num_nls, current_clipboard_type, current_lcid): New
        static variables.

        (convert_to_handle_as_ascii, convert_to_handle_as_coded)
        (render, render_all, run_protected, lisp_error_handler)
        (owner_callback, create_owner, setup_config)
        (enum_locale_callback, cp_from_locale, coding_from_cp): New
        local functions.

        (term_w32select, globals_of_w32select): New global functions.

        (Fw32_set_clipboard_data): Ignore parameter FRAME, use
        clipboard_owner instead.  Use delayed rendering and provide
        all text formats.  Provide CF_LOCALE if necessary.

        (Fw32_get_clipboard_data): Handle CF_UNICODETEXT and
        CF_LOCALE.  Fall back to CF_TEXT, if CF_UNICODETEXT is not
        available.  Force DOS line-ends for decoding.

        (Fx_selection_exists_p): Handle CF_UNICODETEXT.

        (syms_of_w32select): Init and register new variables.

        * w32.h: Add prototypes for globals_of_w32select and
        term_w32select.  Make the neighboring K&R declarations into
        prototypes, too.

        * emacs.c: Include w32.h to get function prototypes.
        (main): Call globals_of_w32select.

        * w32.c (term_ntproc): Call term_w32select.

        * mule-cmds.el (set-locale-environment): Remove call to
        set-selection-coding-system on Windows.

        * s/ms-w32.h: Guard MSC-specific #pragmas with an #ifdef.
2005-02-15 23:19:26 +00:00

141 lines
4.2 KiB
C

#ifndef EMACS_W32_H
#define EMACS_W32_H
/* Support routines for the NT version of Emacs.
Copyright (C) 1994 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* File descriptor set emulation. */
/* MSVC runtime library has limit of 64 descriptors by default */
#define FD_SETSIZE 64
typedef struct {
unsigned int bits[FD_SETSIZE / 32];
} fd_set;
/* standard access macros */
#define FD_SET(n, p) \
do { \
if ((n) < FD_SETSIZE) { \
(p)->bits[(n)/32] |= (1 << (n)%32); \
} \
} while (0)
#define FD_CLR(n, p) \
do { \
if ((n) < FD_SETSIZE) { \
(p)->bits[(n)/32] &= ~(1 << (n)%32); \
} \
} while (0)
#define FD_ISSET(n, p) ((n) < FD_SETSIZE ? ((p)->bits[(n)/32] & (1 << (n)%32)) : 0)
#define FD_ZERO(p) memset((p), 0, sizeof(fd_set))
#define SELECT_TYPE fd_set
/* ------------------------------------------------------------------------- */
/* child_process.status values */
enum {
STATUS_READ_ERROR = -1,
STATUS_READ_READY,
STATUS_READ_IN_PROGRESS,
STATUS_READ_FAILED,
STATUS_READ_SUCCEEDED,
STATUS_READ_ACKNOWLEDGED
};
/* This structure is used for both pipes and sockets; for
a socket, the process handle in pi is NULL. */
typedef struct _child_process
{
int fd;
int pid;
HANDLE char_avail;
HANDLE char_consumed;
HANDLE thrd;
HWND hwnd;
PROCESS_INFORMATION procinfo;
volatile int status;
char chr;
} child_process;
#define MAXDESC FD_SETSIZE
#define MAX_CHILDREN MAXDESC/2
#define CHILD_ACTIVE(cp) ((cp)->char_avail != NULL)
/* parallel array of private info on file handles */
typedef struct
{
unsigned flags;
HANDLE hnd;
child_process * cp;
} filedesc;
extern filedesc fd_info [ MAXDESC ];
/* fd_info flag definitions */
#define FILE_READ 0x0001
#define FILE_WRITE 0x0002
#define FILE_BINARY 0x0010
#define FILE_LAST_CR 0x0020
#define FILE_AT_EOF 0x0040
#define FILE_SEND_SIGCHLD 0x0080
#define FILE_PIPE 0x0100
#define FILE_SOCKET 0x0200
#define FILE_NDELAY 0x0400
extern child_process * new_child (void);
extern void delete_child (child_process *cp);
/* ------------------------------------------------------------------------- */
/* Equivalent of strerror for W32 error codes. */
extern char * w32_strerror (int error_no);
/* Get long (aka "true") form of file name, if it exists. */
extern BOOL w32_get_long_filename (char * name, char * buf, int size);
/* Prepare our standard handles for proper inheritance by child processes. */
extern void prepare_standard_handles (int in, int out,
int err, HANDLE handles[4]);
/* Reset our standard handles to their original state. */
extern void reset_standard_handles (int in, int out,
int err, HANDLE handles[4]);
/* Return the string resource associated with KEY of type TYPE. */
extern LPBYTE w32_get_resource (char * key, LPDWORD type);
extern void init_ntproc (void);
extern void term_ntproc (void);
extern void globals_of_w32 (void);
extern void syms_of_w32term (void);
extern void syms_of_w32fns (void);
extern void globals_of_w32fns (void);
extern void syms_of_w32select (void);
extern void globals_of_w32select (void);
extern void term_w32select (void);
extern void syms_of_w32menu (void);
extern void globals_of_w32menu (void);
extern void syms_of_fontset (void);
#endif /* EMACS_W32_H */
/* arch-tag: 02c36b00-312b-4c4d-a1d9-f905c5e968f0
(do not change this comment) */