home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / EDITOR / NVI179B / NVI179B.ZIP / ex / ex_perl.c < prev    next >
C/C++ Source or Header  |  1996-10-10  |  2KB  |  70 lines

  1. /*-
  2.  * Copyright (c) 1992, 1993, 1994
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  * Copyright (c) 1992, 1993, 1994, 1995, 1996
  5.  *    Keith Bostic.  All rights reserved.
  6.  * Copyright (c) 1995
  7.  *    George V. Neville-Neil. All rights reserved.
  8.  * Copyright (c) 1996
  9.  *    Sven Verdoolaege. All rights reserved.
  10.  *
  11.  * See the LICENSE file for redistribution information.
  12.  */
  13.  
  14. #include "config.h"
  15.  
  16. #ifndef lint
  17. static const char sccsid[] = "@(#)ex_perl.c    8.10 (Berkeley) 9/15/96";
  18. #endif /* not lint */
  19.  
  20. #include <sys/types.h>
  21. #include <sys/queue.h>
  22. #include <sys/time.h>
  23.  
  24. #include <bitstring.h>
  25. #include <ctype.h>
  26. #include <limits.h>
  27. #include <stdio.h>
  28. #include <string.h>
  29. #include <termios.h>
  30. #include <unistd.h>
  31.  
  32. #include "../common/common.h"
  33.  
  34. /* 
  35.  * ex_perl -- :[line [,line]] perl [command]
  36.  *    Run a command through the perl interpreter.
  37.  *
  38.  * ex_perldo -- :[line [,line]] perldo [command]
  39.  *    Run a set of lines through the perl interpreter.
  40.  *
  41.  * PUBLIC: int ex_perl __P((SCR*, EXCMD *));
  42.  */
  43. int 
  44. ex_perl(sp, cmdp)
  45.     SCR *sp;
  46.     EXCMD *cmdp;
  47. {
  48. #ifdef HAVE_PERL_INTERP
  49.     CHAR_T *p;
  50.     size_t len;
  51.  
  52.     /* Skip leading white space. */
  53.     if (cmdp->argc != 0)
  54.         for (p = cmdp->argv[0]->bp,
  55.             len = cmdp->argv[0]->len; len > 0; --len, ++p)
  56.             if (!isblank(*p))
  57.                 break;
  58.     if (cmdp->argc == 0 || len == 0) {
  59.         ex_emsg(sp, cmdp->cmd->usage, EXM_USAGE);
  60.         return (1);
  61.     }
  62.     return (cmdp->cmd == &cmds[C_PERLCMD] ?
  63.         perl_ex_perl(sp, p, len, cmdp->addr1.lno, cmdp->addr2.lno) :
  64.         perl_ex_perldo(sp, p, len, cmdp->addr1.lno, cmdp->addr2.lno));
  65. #else
  66.     msgq(sp, M_ERR, "306|Vi was not loaded with a Perl interpreter");
  67.     return (1);
  68. #endif
  69. }
  70.