⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usersub.c

📁 早期freebsd实现
💻 C
字号:
/* $RCSfile: usersub.c,v $$Revision: 4.0.1.1 $$Date: 91/11/05 19:07:24 $ * * $Log:	usersub.c,v $ * Revision 4.0.1.1  91/11/05  19:07:24  lwall * patch11: there are now subroutines for calling back from C into Perl *  * Revision 4.0  91/03/20  01:56:34  lwall * 4.0 baseline. *  * Revision 3.0.1.1  90/08/09  04:06:10  lwall * patch19: Initial revision *  */#include "EXTERN.h"#include "perl.h"intuserinit(){    init_curses();}/* Be sure to refetch the stack pointer after calling these routines. */intcallback(subname, sp, gimme, hasargs, numargs)char *subname;int sp;			/* stack pointer after args are pushed */int gimme;		/* called in array or scalar context */int hasargs;		/* whether to create a @_ array for routine */int numargs;		/* how many args are pushed on the stack */{    static ARG myarg[3];	/* fake syntax tree node */    int arglast[3];        arglast[2] = sp;    sp -= numargs;    arglast[1] = sp--;    arglast[0] = sp;    if (!myarg[0].arg_ptr.arg_str)	myarg[0].arg_ptr.arg_str = str_make("",0);    myarg[1].arg_type = A_WORD;    myarg[1].arg_ptr.arg_stab = stabent(subname, FALSE);    myarg[2].arg_type = hasargs ? A_EXPR : A_NULL;    return do_subr(myarg, gimme, arglast);}intcallv(subname, sp, gimme, argv)char *subname;register int sp;	/* current stack pointer */int gimme;		/* called in array or scalar context */register char **argv;	/* null terminated arg list, NULL for no arglist */{    register int items = 0;    int hasargs = (argv != 0);    astore(stack, ++sp, Nullstr);	/* reserve spot for 1st return arg */    if (hasargs) {	while (*argv) {	    astore(stack, ++sp, str_2mortal(str_make(*argv,0)));	    items++;	    argv++;	}    }    return callback(subname, sp, gimme, hasargs, items);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -