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

📄 dll.xs

📁 UNIX下perl实现代码
💻 XS
字号:
#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#define INCL_BASE#define INCL_REXXSAA#include <os2emx.h>static RXSTRING * strs;static int	  nstrs;static char *	  trace;static voidneedstrs(int n){    if (n > nstrs) {	if (strs)	    free(strs);	nstrs = 2 * n;	strs = malloc(nstrs * sizeof(RXSTRING));    }}MODULE = OS2::DLL		PACKAGE = OS2::DLLBOOT:    needstrs(8);    trace = getenv("PERL_REXX_DEBUG");SV *_call(name, address, queue="SESSION", ...)	char *		name	void *		address	char *		queue CODE:   {       ULONG	rc;       int	argc, i;       RXSTRING	result;       UCHAR	resbuf[256];       RexxFunctionHandler *fcn = address;       argc = items-3;       needstrs(argc);       if (trace)	   fprintf(stderr, "REXXCALL::_call name: '%s' args:", name);       for (i = 0; i < argc; ++i) {	   STRLEN len;	   char *ptr = SvPV(ST(3+i), len);	   MAKERXSTRING(strs[i], ptr, len);	   if (trace)	       fprintf(stderr, " '%.*s'", len, ptr);       }       if (!*queue)	   queue = "SESSION";       if (trace)	   fprintf(stderr, "\n");       MAKERXSTRING(result, resbuf, sizeof resbuf);       rc = fcn(name, argc, strs, queue, &result);       if (trace)	   fprintf(stderr, "  rc=%X, result='%.*s'\n", rc,		   result.strlength, result.strptr);       ST(0) = sv_newmortal();       if (rc == 0) {	   if (result.strptr)	       sv_setpvn(ST(0), result.strptr, result.strlength);	   else	       sv_setpvn(ST(0), "", 0);       }       if (result.strptr && result.strptr != resbuf)	   DosFreeMem(result.strptr);   }

⌨️ 快捷键说明

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