Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

mainframe screen - PCOMM - EHLLAPI

by jeepj (Scribe)
on Mar 14, 2008 at 10:42 UTC ( #674214=snippet: print w/replies, xml ) Need Help??

as I mentioned in Interact with mainframe screen, I am using the OLE interface of IBM Personal Communications 3270 emulator to perform automated tasks on a mainframe. However, some sessions get stuck when 3 or 4 sessions are used in parallel. So I tried to find another way...and I found it. Starting at version 4.1 or 4.3 (don't know exactly), a DLL EHLAPI.dll is provided with PCOMM to interface C or Java applications with the emulator, and I also found Win32::API.

Once everything is put together, I managed to have some interaction between Perl script and the 3270 emulator with the following code.It is a just a simple one, but works, and shows an increase speed execution(and hopefully less buggy).

here are the pages I found of interest to help me interface my Perl script with the EHLLAPI of the PCOMM:

A quick benchmark, only with the seconds elapsed, shows that for the same queries, the OLE version took around 60 seconds to execute, were the EHLLAPI version tooks only 15 seconds ! Until now I thought that the cause of the 'slow' execution time was due to the execution time of the query on the mainframe, or to the communication between the emulator and the mainframe, but most of the time was spent on the OLE interface.

use strict;
use Win32::API;

print "Getting API function\n";
my $hllapi = new Win32::API('D:/PC3270W/EHLAPI32.dll', 'hllapi', ['P',
+'P','P','P'], 'N');
die("oups not created") unless(defined($hllapi));

print "Connecting to session A";
my $fct=pack('L', 1);
my $connBuffer="A"."\0" x 3;
my $connBufferLen = pack('L', 4);
my $returnCode=pack('L',13);
my $ret=unpack('L',$returnCode);
print "return code -$ret-\n";
die("oups") if($ret != 0);

print "Trying sendkeys - JD\n";
$fct=pack('L', 3);
my $keys='JD@E';
my $keysLengh=pack('L', 4);

print "Waiting for command to be finished\n";
my $a="\0";
my $b=pack('L',0);
my $rc=pack('L',0);

print "Reading screen\n";
my $readBuf= "\0" x 3000;
my $lenToRead=pack('L',1920);
my $offset=pack('L',1);

for(my $k=0;$k<24;$k++){
    my $offset=$k*80;
    print substr($readBuf,$offset,80)."\n";
print "\n";

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://674214]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2018-10-20 12:46 GMT
Find Nodes?
    Voting Booth?
    When I need money for a bigger acquisition, I usually ...

    Results (117 votes). Check out past polls.