develooper Front page | perl.vmsperl | Postings from June 2002

strange result from sys$getjpi

Thread Next
Forrest Cahoon
June 9, 2002 18:51
strange result from sys$getjpi
Message ID:
Hey folks.

I'm working on a module that wants to know whether it's being run
interactively, so I'm checking JPI$_MODE in a call to sys$getjpiw().

Here's a test file: I think it's short enough to post:

==============(beginning of jpitest.xs)=====================

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include <starlet.h>
#include <jpidef.h>

#pragma __member_alignment __save
typedef struct _ile3
#pragma __nomember_alignment
  unsigned short int


  unsigned short int
} ile3;

typedef struct _quadword { int lo, hi; } quadword;
#pragma __member_alignment __restore

MODULE = jpitest                PACKAGE = jpitest


   quadword iosb;
   ile3 itmlst[2];
   long mode;
   int status;

   itmlst[0].ile3$w_code = JPI$_MODE;
   itmlst[0].ile3$w_length = sizeof(mode);
   itmlst[0].ile3$ps_bufaddr = &mode;
   itmlst[0].ile3$ps_retlen_addr = 0;

   memset(&itmlst[1], 0, sizeof(ile3));

   status = sys$getjpiw(0, 0, 0, itmlst, &iosb, 0, 0);
   printf ("status = %%X%08X   mode = %d\n", status, mode);

==================(end of jpitest.xs)==========================

With a that just calls jpitest::test1(), I get this output:

status = %X00000001   mode = 0

But 0 is JPI$K_OTHER, what I should really be getting is 3, which is
JPI$K_INTERACTIVE.  Changing this XS code into plain C, where test1()
becomes main() and running it gives me the results I expect:

status = %X00000001   mode = 3

This is with Perl 5.6.0 on OpenVMS Alpha V7.3.

What the heck's going on here?

| Forrest Cahoon      | |------------------------------|
| 850 21st Ave SE     |----------------------| Only unbalanced people       |
| Mpls MN  55414-2514 |                      |        can tip the scales... |

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About