/*----------------------------------------------------------------*/ /* mailnmxl.c Keven Miller 03/29/2011 kevenm@3kranger.com */ #pragma list off /* Compile: CCXL MAILNMXL,,,"-Aa +e +w1" */ /* LINKEDIT "BUILDXL MAILNMXL" */ /* LINKEDIT "ADDXL $OLDPASS;TO=MAILNMXL;SHARE;REPLACE */ #define _MPEXL_SOURCE #include /* fprintf setvbuf */ #include /* memset strcpy */ #include /* getenv atoi */ #include /* CCE */ #pragma intrinsic CCODE #pragma intrinsic HPGETPROCPLABEL #pragma intrinsic HPSETCCODE typedef short s16; typedef unsigned short u16; typedef int s32; typedef unsigned int u32; typedef float f32; typedef void (*vfp)(); typedef u32 (*ufp)(); #pragma HP_ALIGN MPE_16 typedef int hs32; typedef unsigned int hu32; typedef union { s32 all; struct { s16 err; s16 sub; } info; } mpe_status_t; #pragma HP_ALIGN POP #define VFP_IPCDEST 0 #define VFP_MAX 1 #define proc #define VERSION "E.01.00" #define VAR_DEBUG "MAILNMXL_DEBUG" static s16 rngon; static s16 rnginit; static char rngcc [5]; static vfp rngfp [VFP_MAX]; /*----------------------------------------------------------------*/ proc static int rng_getint ( char *var ) { int x; char *cp; x = 0; cp = getenv (var); if (cp) x = atoi (cp); return x; } /*----------------------------------------------------------------*/ proc static vfp rng_ptr ( int idx, char *name ) { int x; vfp fp; mpe_status_t stat; if ( ! rnginit ) { strcpy ( rngcc, "GLE?" ); x = rng_getint ( VAR_DEBUG ); rngon = ( x > 0 ? 1 : 0 ); setvbuf (stderr, 0, _IOLBF, 0); if (rngon) fprintf (stderr, "[MAILNMXL] %s\n", VERSION ); rnginit = 1; } fp = rngfp [idx]; if ( ! fp ) { /* -1=case 0=bothcase */ HPGETPROCPLABEL ( name, &fp, &stat.all,, -1 ); if ( stat.all ) { fp = 0; fprintf (stderr, "[rng_ptr%s] err %d\n", name, stat.info.err ); } } return fp; } /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ proc void IPCDEST ( s32 kin, char *loc, s32 llen, s32 pro, char *ploc, s32 plen, hs32 *flg, void *opt, hs32 *dest, hs32 *stat ) { int cc, x; vfp fp; char func [] = " IPCDEST "; s16 *op; s32 adr, sadr; fp = rng_ptr ( VFP_IPCDEST, func ); adr = 0; sadr = 0; if ( ploc && plen <= 4 ) { memcpy ( &((char*)&adr) [4-plen], ploc, plen ); sadr = rng_getint ( "IPCDEST_PORT" ); if ( sadr ) memcpy ( ploc, &((char*)&sadr) [4-plen], plen ); else sadr = adr; } (*fp) ( kin, loc, llen, pro, ploc, plen, flg, opt, dest, stat ); cc = CCODE (); if (rngon) { op = (s16*) opt; fprintf (stderr, "[rng%scc%c] kind %d %d[%.*s] prot %d %d[%d(%d)] flg 0x%X" " dest %d stat %d optent %d\n", func, rngcc [cc], kin, llen, ( loc ? llen : 0 ), ( loc ? loc : "" ), pro, plen, sadr, adr, ( flg ? *flg : 0 ), ( dest ? *dest : 0 ), ( stat ? *stat : 0 ), ( opt ? op [1] : 0) ); } HPSETCCODE (cc); } /*----------------------------------------------------------------*/