Portal | Manuals | References | Downloads | Info | Programs | JCLs | Mainframe wiki | Quick Ref
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Profile Log in to check your private messages Log in
 
REXX and METAL C

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> CLIST & REXX
View previous topic :: :: View next topic  
Author Message
enrico-sorichetti

Global Moderator


Joined: 14 Mar 2007
Posts: 10326
Location: italy

PostPosted: Thu Jun 05, 2014 3:40 pm    Post subject: REXX and METAL C
Reply with quote

here is a sample ( tested and working ) on how to write a REXX external function in METAL C

Code:

#pragma csect(CODE, "CRXWTO$")
#pragma prolog(CRXWTO,"CCPROLOG")
#pragma epilog(CRXWTO,"CCEPILOG")

#include "metal.h"
#include "string.h"
#include "stdio.h"

#include "irxefpl.h"
#include "irxargtb.h"
#include "irxenvb.h"
#include "irxevalb.h"
#include "irxshvb.h"

__asm(" WTO TEXT=,MF=L " : "DS"(wtol));

struct WTO_TEXT {
    unsigned short l;
    char t[121];
} wto_text ;

int CRXWTO(struct efpl efpl)
{
    struct envblock *envp ;
    struct evalblock *evalp  ;

    struct argtable_entry *argp ;

    argp = ( struct argtable_entry * ) efpl.efplarg ;
    evalp = * ( struct evalblock * * ) efpl.efpleval ;

    /* arg(1) wto text */
    if ((int) argp->argtable_argstring_ptr == 0xffffffff)
    {
       sprintf(&evalp->evalblock_evdata, "%d", 4);
       evalp->evalblock_evlen = strlen(&evalp->evalblock_evdata);
       return(0) ;
    }


    if (argp->argtable_argstring_length > 120)
    {
       sprintf(&evalp->evalblock_evdata, "%d", 8);
       evalp->evalblock_evlen = strlen(&evalp->evalblock_evdata);
       return(0) ;
    }

    wto_text.l = argp->argtable_argstring_length;
    memcpy(wto_text.t, argp->argtable_argstring_ptr, wto_text.l);
    wto_text.t[wto_text.l] = 0;

    __asm(" WTO TEXT=,MF=L " : "DS"(wtob));
    wtob=wtol;
    __asm( " WTO text=(%0),MF=(E,(%1)) "
           : :
           "r"(&wto_text), "r"(&wtob));

    sprintf(&evalp->evalblock_evdata, "%d", 0);
    evalp->evalblock_evlen = strlen(&evalp->evalblock_evdata);
    return (0) ;
}
Back to top
View user's profile Send private message

View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> CLIST & REXX All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts How to write Rexx program to size and... sreejeshcs CLIST & REXX 14 Thu Oct 12, 2017 7:26 am
This topic is locked: you cannot edit posts or make replies. Rexx to execute spool commands upendrasri CLIST & REXX 5 Wed Oct 04, 2017 6:54 am
This topic is locked: you cannot edit posts or make replies. Rexx to execute spool commands upendrasri CLIST & REXX 47 Fri Sep 29, 2017 1:08 pm
No new posts ejck thru rexx to multiple jobs insid... Susanta All Other Mainframe Topics 5 Tue Sep 19, 2017 1:39 pm
This topic is locked: you cannot edit posts or make replies. Extract all "IF" Statements... Adarsh Damodaran CLIST & REXX 1 Wed Sep 06, 2017 9:28 am

Facebook
Back to Top
 
Job Vacancies | Forum Rules | Bookmarks | Subscriptions | FAQ | Polls | Contact Us