source: trunk/third/perl/perliol.h @ 20075

Revision 20075, 7.2 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20074, which included commits to RCS files with non-trunk default branches.
Line 
1#ifndef _PERLIOL_H
2#define _PERLIOL_H
3
4typedef struct {
5    PerlIO_funcs *funcs;
6    SV *arg;
7} PerlIO_pair_t;
8
9struct PerlIO_list_s {
10    IV refcnt;
11    IV cur;
12    IV len;
13    PerlIO_pair_t *array;
14};
15
16struct _PerlIO_funcs {
17    Size_t fsize;
18    char *name;
19    Size_t size;
20    U32 kind;
21    IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
22    IV (*Popped) (pTHX_ PerlIO *f);
23    PerlIO *(*Open) (pTHX_ PerlIO_funcs *tab,
24                     PerlIO_list_t *layers, IV n,
25                     const char *mode,
26                     int fd, int imode, int perm,
27                     PerlIO *old, int narg, SV **args);
28    IV (*Binmode)(pTHX_ PerlIO *f);
29    SV *(*Getarg) (pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags);
30    IV (*Fileno) (pTHX_ PerlIO *f);
31    PerlIO *(*Dup) (pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
32    /* Unix-like functions - cf sfio line disciplines */
33     SSize_t(*Read) (pTHX_ PerlIO *f, void *vbuf, Size_t count);
34     SSize_t(*Unread) (pTHX_ PerlIO *f, const void *vbuf, Size_t count);
35     SSize_t(*Write) (pTHX_ PerlIO *f, const void *vbuf, Size_t count);
36    IV (*Seek) (pTHX_ PerlIO *f, Off_t offset, int whence);
37     Off_t(*Tell) (pTHX_ PerlIO *f);
38    IV (*Close) (pTHX_ PerlIO *f);
39    /* Stdio-like buffered IO functions */
40    IV (*Flush) (pTHX_ PerlIO *f);
41    IV (*Fill) (pTHX_ PerlIO *f);
42    IV (*Eof) (pTHX_ PerlIO *f);
43    IV (*Error) (pTHX_ PerlIO *f);
44    void (*Clearerr) (pTHX_ PerlIO *f);
45    void (*Setlinebuf) (pTHX_ PerlIO *f);
46    /* Perl's snooping functions */
47    STDCHAR *(*Get_base) (pTHX_ PerlIO *f);
48     Size_t(*Get_bufsiz) (pTHX_ PerlIO *f);
49    STDCHAR *(*Get_ptr) (pTHX_ PerlIO *f);
50     SSize_t(*Get_cnt) (pTHX_ PerlIO *f);
51    void (*Set_ptrcnt) (pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt);
52};
53
54/*--------------------------------------------------------------------------------------*/
55/* Kind values */
56#define PERLIO_K_RAW            0x00000001
57#define PERLIO_K_BUFFERED       0x00000002
58#define PERLIO_K_CANCRLF        0x00000004
59#define PERLIO_K_FASTGETS       0x00000008
60#define PERLIO_K_DUMMY          0x00000010
61#define PERLIO_K_UTF8           0x00008000
62#define PERLIO_K_DESTRUCT       0x00010000
63#define PERLIO_K_MULTIARG       0x00020000
64
65/*--------------------------------------------------------------------------------------*/
66struct _PerlIO {
67    PerlIOl *next;              /* Lower layer */
68    PerlIO_funcs *tab;          /* Functions for this layer */
69    U32 flags;                  /* Various flags for state */
70};
71
72/*--------------------------------------------------------------------------------------*/
73
74/* Flag values */
75#define PERLIO_F_EOF            0x00000100
76#define PERLIO_F_CANWRITE       0x00000200
77#define PERLIO_F_CANREAD        0x00000400
78#define PERLIO_F_ERROR          0x00000800
79#define PERLIO_F_TRUNCATE       0x00001000
80#define PERLIO_F_APPEND         0x00002000
81#define PERLIO_F_CRLF           0x00004000
82#define PERLIO_F_UTF8           0x00008000
83#define PERLIO_F_UNBUF          0x00010000
84#define PERLIO_F_WRBUF          0x00020000
85#define PERLIO_F_RDBUF          0x00040000
86#define PERLIO_F_LINEBUF        0x00080000
87#define PERLIO_F_TEMP           0x00100000
88#define PERLIO_F_OPEN           0x00200000
89#define PERLIO_F_FASTGETS       0x00400000
90#define PERLIO_F_TTY            0x00800000
91#define PERLIO_F_NOTREG         0x01000000   
92
93#define PerlIOBase(f)      (*(f))
94#define PerlIOSelf(f,type) ((type *)PerlIOBase(f))
95#define PerlIONext(f)      (&(PerlIOBase(f)->next))
96#define PerlIOValid(f)     ((f) && *(f))
97
98/*--------------------------------------------------------------------------------------*/
99/* Data exports - EXT rather than extern is needed for Cygwin */
100EXT PerlIO_funcs PerlIO_unix;
101EXT PerlIO_funcs PerlIO_perlio;
102EXT PerlIO_funcs PerlIO_stdio;
103EXT PerlIO_funcs PerlIO_crlf;
104EXT PerlIO_funcs PerlIO_utf8;
105EXT PerlIO_funcs PerlIO_byte;
106EXT PerlIO_funcs PerlIO_raw;
107EXT PerlIO_funcs PerlIO_pending;
108#ifdef HAS_MMAP
109EXT PerlIO_funcs PerlIO_mmap;
110#endif
111#ifdef WIN32
112EXT PerlIO_funcs PerlIO_win32;
113#endif
114extern PerlIO *PerlIO_allocate(pTHX);
115extern SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n);
116#define PerlIOArg PerlIO_arg_fetch(layers,n)
117
118#ifdef PERLIO_USING_CRLF
119#define PERLIO_STDTEXT "t"
120#else
121#define PERLIO_STDTEXT ""
122#endif
123
124/*--------------------------------------------------------------------------------------*/
125/* Generic, or stub layer functions */
126
127extern IV PerlIOBase_fileno(pTHX_ PerlIO *f);
128extern PerlIO *PerlIOBase_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
129extern IV PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
130extern IV PerlIOBase_popped(pTHX_ PerlIO *f);
131extern IV PerlIOBase_binmode(pTHX_ PerlIO *f);
132extern SSize_t PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
133extern SSize_t PerlIOBase_unread(pTHX_ PerlIO *f, const void *vbuf,
134                                 Size_t count);
135extern IV PerlIOBase_eof(pTHX_ PerlIO *f);
136extern IV PerlIOBase_error(pTHX_ PerlIO *f);
137extern void PerlIOBase_clearerr(pTHX_ PerlIO *f);
138extern IV PerlIOBase_close(pTHX_ PerlIO *f);
139extern void PerlIOBase_setlinebuf(pTHX_ PerlIO *f);
140extern void PerlIOBase_flush_linebuf(pTHX);
141
142extern IV PerlIOBase_noop_ok(pTHX_ PerlIO *f);
143extern IV PerlIOBase_noop_fail(pTHX_ PerlIO *f);
144
145/*--------------------------------------------------------------------------------------*/
146/* perlio buffer layer
147   As this is reasonably generic its struct and "methods" are declared here
148   so they can be used to "inherit" from it.
149*/
150
151typedef struct {
152    struct _PerlIO base;        /* Base "class" info */
153    STDCHAR *buf;               /* Start of buffer */
154    STDCHAR *end;               /* End of valid part of buffer */
155    STDCHAR *ptr;               /* Current position in buffer */
156    Off_t posn;                 /* Offset of buf into the file */
157    Size_t bufsiz;              /* Real size of buffer */
158    IV oneword;                 /* Emergency buffer */
159} PerlIOBuf;
160
161extern int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode,
162                    PerlIO_list_t *layers, IV n, IV max);
163extern int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names);
164extern void PerlIO_list_free(pTHX_ PerlIO_list_t *list);
165extern PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def);
166
167
168extern SV *PerlIO_sv_dup(pTHX_ SV *arg, CLONE_PARAMS *param);
169extern PerlIO *PerlIOBuf_open(pTHX_ PerlIO_funcs *self,
170                              PerlIO_list_t *layers, IV n,
171                              const char *mode, int fd, int imode,
172                              int perm, PerlIO *old, int narg, SV **args);
173extern IV PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab);
174extern IV PerlIOBuf_popped(pTHX_ PerlIO *f);
175extern PerlIO *PerlIOBuf_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags);
176extern SSize_t PerlIOBuf_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
177extern SSize_t PerlIOBuf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
178extern SSize_t PerlIOBuf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
179extern IV PerlIOBuf_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
180extern Off_t PerlIOBuf_tell(pTHX_ PerlIO *f);
181extern IV PerlIOBuf_close(pTHX_ PerlIO *f);
182extern IV PerlIOBuf_flush(pTHX_ PerlIO *f);
183extern IV PerlIOBuf_fill(pTHX_ PerlIO *f);
184extern STDCHAR *PerlIOBuf_get_base(pTHX_ PerlIO *f);
185extern Size_t PerlIOBuf_bufsiz(pTHX_ PerlIO *f);
186extern STDCHAR *PerlIOBuf_get_ptr(pTHX_ PerlIO *f);
187extern SSize_t PerlIOBuf_get_cnt(pTHX_ PerlIO *f);
188extern void PerlIOBuf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt);
189
190extern int PerlIOUnix_oflags(const char *mode);
191
192/*--------------------------------------------------------------------------------------*/
193
194#endif                          /* _PERLIOL_H */
Note: See TracBrowser for help on using the repository browser.