Commit | Line | Data |
---|---|---|
e4598559 MW |
1 | /* |
2 | * ports-internal.h - internal-only declarations for ports. | |
3 | * | |
4 | * Copyright (C) 2013 Free Software Foundation, Inc. | |
5 | * | |
6 | * This library is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU Lesser General Public License | |
8 | * as published by the Free Software Foundation; either version 3 of | |
9 | * the License, or (at your option) any later version. | |
10 | * | |
11 | * This library is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
17 | * License along with this library; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
19 | * 02110-1301 USA | |
20 | */ | |
21 | ||
22 | #ifndef SCM_PORTS_INTERNAL | |
23 | #define SCM_PORTS_INTERNAL | |
24 | ||
25 | #include "libguile/_scm.h" | |
26 | #include "libguile/ports.h" | |
27 | ||
337edc59 MW |
28 | enum scm_port_encoding_mode { |
29 | SCM_PORT_ENCODING_MODE_UTF8, | |
f6f4feb0 | 30 | SCM_PORT_ENCODING_MODE_LATIN1, |
337edc59 MW |
31 | SCM_PORT_ENCODING_MODE_ICONV |
32 | }; | |
33 | ||
34 | typedef enum scm_port_encoding_mode scm_t_port_encoding_mode; | |
35 | ||
36 | /* This is a separate object so that only those ports that use iconv | |
f6f4feb0 | 37 | cause finalizers to be registered. */ |
337edc59 | 38 | struct scm_iconv_descriptors |
e4598559 MW |
39 | { |
40 | /* input/output iconv conversion descriptors */ | |
41 | void *input_cd; | |
42 | void *output_cd; | |
43 | }; | |
44 | ||
337edc59 MW |
45 | typedef struct scm_iconv_descriptors scm_t_iconv_descriptors; |
46 | ||
47 | struct scm_port_internal | |
48 | { | |
cdd3d6c9 MW |
49 | unsigned at_stream_start_for_bom_read : 1; |
50 | unsigned at_stream_start_for_bom_write : 1; | |
337edc59 MW |
51 | scm_t_port_encoding_mode encoding_mode; |
52 | scm_t_iconv_descriptors *iconv_descriptors; | |
45c0878b | 53 | int pending_eof; |
05d7f762 | 54 | SCM alist; |
337edc59 MW |
55 | }; |
56 | ||
e4598559 MW |
57 | typedef struct scm_port_internal scm_t_port_internal; |
58 | ||
cdd3d6c9 MW |
59 | #define SCM_UNICODE_BOM 0xFEFFUL /* Unicode byte-order mark */ |
60 | ||
f6f4feb0 | 61 | #define SCM_PORT_GET_INTERNAL(x) (SCM_PTAB_ENTRY(x)->internal) |
e4598559 | 62 | |
cdd3d6c9 MW |
63 | SCM_INTERNAL scm_t_iconv_descriptors * |
64 | scm_i_port_iconv_descriptors (SCM port, scm_t_port_rw_active mode); | |
337edc59 | 65 | |
e4598559 | 66 | #endif |