if_perlsfio.c
上传用户:gddssl
上传日期:2007-01-06
资源大小:1003k
文件大小:1k
源码类别:

编辑器/阅读器

开发平台:

DOS

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8. /*
  9.  * if_perlsfio.c: Special I/O functions for Perl interface.
  10.  */
  11. #define _memory_h /* avoid memset redeclaration */
  12. #define IN_PERL_FILE /* don't include if_perl.pro from prot.h */
  13. #include "vim.h"
  14. /*
  15.  * Avoid clashes between Perl and Vim namespace.
  16.  */
  17. #undef MAGIC
  18. #undef NORMAL
  19. #undef STRLEN
  20. #undef FF
  21. #undef OP_DELETE
  22. #include <EXTERN.h>
  23. #include <perl.h>
  24. #include <XSUB.h>
  25. #ifdef USE_SFIO
  26. #define NIL(type) ((type)0)
  27.     static int
  28. sfvimwrite(f, buf, n, disc)
  29.     Sfio_t     *f; /* stream involved */
  30.     char     *buf; /* buffer to read from */
  31.     int     n; /* number of bytes to write */
  32.     Sfdisc_t     *disc; /* discipline */
  33. {
  34.     char_u *str;
  35.     str = vim_strnsave((char_u *)buf, n);
  36.     if (str == NULL)
  37. return 0;
  38.     msg_split((char *)str);
  39.     vim_free(str);
  40.     return n;
  41. }
  42. /*
  43.  * sfdcnewnvi --
  44.  *  Create Vim discipline
  45.  */
  46.     Sfdisc_t *
  47. sfdcnewvim()
  48. {
  49.     Sfdisc_t *disc;
  50.     disc = (Sfdisc_t *)alloc((unsigned)sizeof(Sfdisc_t));
  51.     if (disc == NULL)
  52. return NULL;
  53.     disc->readf = (Sfread_f)NULL;
  54.     disc->writef = sfvimwrite;
  55.     disc->seekf = (Sfseek_f)NULL;
  56.     disc->exceptf = (Sfexcept_f)NULL;
  57.     return disc;
  58. }
  59. #endif /* USE_SFIO */