diff options
Diffstat (limited to 'src/if_perlsfio.c')
-rw-r--r-- | src/if_perlsfio.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/if_perlsfio.c b/src/if_perlsfio.c new file mode 100644 index 0000000..528a1b4 --- /dev/null +++ b/src/if_perlsfio.c @@ -0,0 +1,66 @@ +/* vi:set ts=8 sts=4 sw=4 noet: + * + * VIM - Vi IMproved by Bram Moolenaar + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. + * See README.txt for an overview of the Vim source code. + */ +/* + * if_perlsfio.c: Special I/O functions for Perl interface. + */ + +#define _memory_h /* avoid memset redeclaration */ +#define IN_PERL_FILE /* don't include if_perl.pro from prot.h */ + +#include "vim.h" + +#if defined(USE_SFIO) || defined(PROTO) + +#ifndef USE_SFIO /* just generating prototypes */ +# define Sfio_t int +# define Sfdisc_t int +#endif + +#define NIL(type) ((type)0) + + static int +sfvimwrite( + Sfio_t *f, /* stream involved */ + char *buf, /* buffer to read from */ + int n, /* number of bytes to write */ + Sfdisc_t *disc) /* discipline */ +{ + char_u *str; + + str = vim_strnsave((char_u *)buf, n); + if (str == NULL) + return 0; + msg_split((char *)str); + vim_free(str); + + return n; +} + +/* + * sfdcnewnvi -- + * Create Vim discipline + */ + Sfdisc_t * +sfdcnewvim(void) +{ + Sfdisc_t *disc; + + disc = (Sfdisc_t *)alloc((unsigned)sizeof(Sfdisc_t)); + if (disc == NULL) + return NULL; + + disc->readf = (Sfread_f)NULL; + disc->writef = sfvimwrite; + disc->seekf = (Sfseek_f)NULL; + disc->exceptf = (Sfexcept_f)NULL; + + return disc; +} + +#endif /* USE_SFIO */ |