X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=os2%2FOS2%2FREXX%2FREXX.xs;h=8a8e5f2da09f88dba1572762f59d514dcaf9e4b2;hb=ed344e4f516e393bcdfd181ec61ffbb056bebd56;hp=14489f965df4b07d20dc5be7e06858170da79212;hpb=924508f06969d29692d1762cecf34a062431e1af;p=p5sagit%2Fp5-mst-13.2.git diff --git a/os2/OS2/REXX/REXX.xs b/os2/OS2/REXX/REXX.xs index 14489f9..8a8e5f2 100644 --- a/os2/OS2/REXX/REXX.xs +++ b/os2/OS2/REXX/REXX.xs @@ -44,7 +44,7 @@ static ULONG PERLCALL(PSZ name, ULONG argc, PRXSTRING argv, PSZ queue, PRXSTRING static long incompartment; static SV* -exec_in_REXX(char *cmd, char * handlerName, RexxFunctionHandler *handler) +exec_in_REXX(pTHX_ char *cmd, char * handlerName, RexxFunctionHandler *handler) { dTHR; HMODULE hRexx, hRexxAPI; @@ -61,7 +61,8 @@ exec_in_REXX(char *cmd, char * handlerName, RexxFunctionHandler *handler) LONG rc; SV *res; - if (incompartment) die ("Attempt to reenter into REXX compartment"); + if (incompartment) + Perl_die(aTHX_ "Attempt to reenter into REXX compartment"); incompartment = 1; if (DosLoadModule(buf, sizeof buf, "REXX", &hRexx) @@ -71,7 +72,7 @@ exec_in_REXX(char *cmd, char * handlerName, RexxFunctionHandler *handler) (PFN *)&pRexxRegisterFunctionExe) || DosQueryProcAddr(hRexxAPI, 0, "RexxDeregisterFunction", (PFN *)&pRexxDeregisterFunction)) { - die("REXX not available\n"); + Perl_die(aTHX_ "REXX not available\n"); } if (handlerName) @@ -94,11 +95,12 @@ exec_in_REXX(char *cmd, char * handlerName, RexxFunctionHandler *handler) } else { res = NEWSV(729,0); } - if (rc || SvTRUE(GvSV(errgv))) { - if (SvTRUE(GvSV(errgv))) { - die ("Error inside perl function called from REXX compartment.\n%s", SvPV(GvSV(errgv), na)) ; + if (rc || SvTRUE(GvSV(PL_errgv))) { + if (SvTRUE(GvSV(PL_errgv))) { + STRLEN n_a; + Perl_die(aTHX_ "Error inside perl function called from REXX compartment.\n%s", SvPV(GvSV(PL_errgv), n_a)) ; } - die ("REXX compartment returned non-zero status %li", rc); + Perl_die(aTHX_ "REXX compartment returned non-zero status %li", rc); } return res; @@ -112,16 +114,17 @@ PERLSTART(PSZ name, ULONG argc, PRXSTRING argv, PSZ queue, PRXSTRING ret) return PERLCALL(NULL, argc, argv, queue, ret); } -#define in_rexx_compartment() exec_in_REXX("return StartPerl()\r\n", \ +#define in_rexx_compartment() exec_in_REXX(aTHX_ "return StartPerl()\r\n", \ "StartPerl", PERLSTART) #define REXX_call(cv) ( exec_cv = (cv), in_rexx_compartment()) #define REXX_eval_with(cmd,name,cv) ( exec_cv = (cv), \ - exec_in_REXX(cmd,name,PERLSTART)) + exec_in_REXX(aTHX_ cmd,name,PERLSTART)) #define REXX_eval(cmd) REXX_eval_with(cmd,NULL,NULL) static ULONG PERLCALL(PSZ name, ULONG argc, PRXSTRING argv, PSZ queue, PRXSTRING ret) { + dTHX; EXCEPTIONREGISTRATIONRECORD xreg = { NULL, _emx_exception }; int i, rc; unsigned long len; @@ -216,17 +219,7 @@ initialize(void) } static int -not_here(s) -char *s; -{ - croak("%s not implemented on this architecture", s); - return -1; -} - -static int -constant(name, arg) -char *name; -int arg; +constant(char *name, int arg) { errno = EINVAL; return 0; @@ -243,49 +236,6 @@ constant(name,arg) char * name int arg -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); - } - int _set(name,value,...) char * name @@ -374,7 +324,7 @@ _fetch(name, ...) var->shvname.strlength, var->shvname.strptr, namelen, var->shvvalue.strptr); if (var->shvret & RXSHV_NEWV || !var->shvvalue.strptr) - PUSHs(&sv_undef); + PUSHs(&PL_sv_undef); else PUSHs(sv_2mortal(newSVpv(var->shvvalue.strptr, namelen))); @@ -428,7 +378,7 @@ _next(stem) PUSHs(sv_2mortal(newSVpv(sv.shvvalue.strptr, valuelen))); DosFreeMem(sv.shvvalue.strptr); } else - PUSHs(&sv_undef); + PUSHs(&PL_sv_undef); } else if (rc != RXSHV_LVAR) { die("Error %i when in _next", rc); } else {