home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
RXAPPC.ZIP
/
RXAPPC.INF
(
.txt
)
< prev
next >
Wrap
OS/2 Help File
|
1992-10-12
|
32KB
|
1,222 lines
ΓòÉΓòÉΓòÉ 1. (C) Copyright IBM Corp. 1992 ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 2. Installation ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 2.1. REXXAPPC Installation ΓòÉΓòÉΓòÉ
Copy SAAAPPC.DLL to a LIBPATH directory
Start Communications Manager
Add a modified version of the following TP definition for TP2 to your
Communications Manager NDF file in \CMLIB\APPN
DEFINE_TP TP_NAME(TP2)
FILESPEC(idrive\os2\cmd.exe)
PARM_STRING(/c [fdrive\fpath\]tp2.cmd)
CONVERSATION_TYPE(EITHER)
CONV_SECURITY_RQD(NO)
SYNC_LEVEL(EITHER)
TP_OPERATION(NONQUEUED_AM_STARTED)
PROGRAM_TYPE(VIO_WINDOWABLE)
RECEIVE_ALLOCATE_TIMEOUT(INFINITE);
where idrive is the drive OS/2 is installed on and
fdrive\fpath are the drive and path where TP2.CMD exists if it is NOT in a
directory in the PATH= environment variable
type APPNV configname /E to update the active Communications Manager
configuration
where configname is the name of the NDF file modified above
Add the following line to all REXXAPPC execs to insure the function is
registered
If rxfuncquery('Appc') then call rxfuncadd 'APPC','SAAAPPC','APPCSRV'
ΓòÉΓòÉΓòÉ 3. REXXAPPC Programming Interface ΓòÉΓòÉΓòÉ
The REXXAPPC function package provides two sets of functions:
1. Control Verbs
o Receive_allocate
o Tp_started
o Tp_ended
2. Conversation Verbs
o Allocate
o Confirm
o Confirmed
o Convert
o Deallocate
o Flush
o Get_attributes
o Prepare_to_receive
o Receive_wait
o Request_to_send
o Send_Conversation
o Send_data
o Send_error
o Test_rts
Note: These verbs are supported in both Basic and Mapped formats thru a
function parameter rather than separate functions.
The basic format of the APPC service function is as follows:
APPC( function [ , function specific data ] )
REXXAPPC Function syntax
ΓòÉΓòÉΓòÉ 3.1. Basic Return codes ΓòÉΓòÉΓòÉ
In addition to specific return codes for each function, there is a set of
values that can be returned for any of the functions. These are called Basic
return codes and are documented here to simplify the document.
Syntax related Basic return codes
o BAD_CONV_ID 0x02000000
o BAD_CONV_TYPE 0x11000000
o BAD_LL 0xF1000000
o BAD_LU_ALIAS 0x03000000
o BAD_RETURN_CONTROL 0x14000000
o BAD_SECURITY 0x13000000
o BAD_SYNC_LEVEL 0x12000000
o BAD_TP_ID 0x01000000
Operation Related Basic return codes
o TP_BUSY 0x02F0
o COMM_SUBSYSTEM_ABENDED 0x03F0
o COMM_SUBSYSTEM_NOT_LOADED 0x04F0
o INVALID_VERB_SEGMENT 0x08F0
o UNEXPECTED_DOS_ERROR 0x11F0
o CONVERSATION_TYPE_MIXED 0x1900
o CANCELLED 0x2100
o DEALLOC_ABEND 0x0500
o DEALLOC_ABEND_PROG 0x0600
o DEALLOC_ABEND_SVC 0x0700
o DEALLOC_ABEND_TIMER 0x0800
o DEALLOC_NORMAL 0x0900
o PROG_ERROR_NO_TRUNC 0x0C00
o PROG_ERROR_PURGING 0x0E00
o PROG_ERROR_TRUNC 0x0D00
o UNSUCCESSFUL 0x1400
o STACK_TOO_SMALL 0x15F0
o ALLOCATION_FAILURE_NO_RETRY 0x04000000
o ALLOCATION_FAILURE_RETRY 0x05000000
o CONVERSATION_TYPE_MISMATCH 0x34600810
o ALLOCATE_NOT_PENDING 0x09050000
o ATTACH_MANAGER_INACTIVE 0x08050000
o CONFIRM_BAD_STATE 0x32000000
o CONFIRM_NOT_LL_BDY 0x33000000
o CONFIRM_ON_SYNC_LEVEL_NONE 0x31000000
o CONFIRMED_BAD_STATE 0x41000000
o DEALLOC_BAD_TYPE 0x51000000
o DEALLOC_CONFIRM_BAD_STATE 0x53000000
o DEALLOC_FLUSH_BAD_STATE 0x52000000
o DEALLOC_LOG_LL_WRONG 0x57000000
o DEALLOC_NOT_LL_BDY 0x55000000
o FLUSH_NOT_SEND_STATE 0x61000000
o INVALID_DATA_SEGMENT 0x06000000
o INVALID_PROCESS 0x25050000
o INVALID_SEMAPHORE_HANDLE 0xD6000000
o NO_USE_OF_SNASVCMG 0x17000000
o P_TO_R_INVALID_TYPE 0xA1000000
o P_TO_R_NOT_LL_BDY 0xA2000000
o P_TO_R_NOT_SEND_STATE 0xA3000000
o PIP_LEN_INCORRECT 0x16000000
o PIP_NOT_ALLOWED 0x31600810
o PIP_NOT_SPECIFIED_CORRECTLY 0x32600810
o RCV_AND_POST_NOT_LL_BDY 0xD2000000
o R_T_S_BAD_STATE 0xE1000000
o RCV_AND_POST_BAD_FILL 0xD5000000
o RCV_AND_POST_BAD_STATE 0xD1000000
o RCV_AND_WAIT_BAD_FILL 0xB5000000
o RCV_AND_WAIT_BAD_STATE 0xB1000000
o RCV_AND_WAIT_NOT_LL_BDY 0xB2000000
o RCV_IMMD_BAD_FILL 0xC4000000
o RCV_IMMD_BAD_STATE 0xC1000000
o SEND_ERROR_BAD_TYPE 0x03010000
o SECURITY_NOT_VALID 0x51600F08
o SEND_DATA_BAD_MAP_NAME 0xF3000000
o SEND_DATA_NOT_SEND_STATE 0xF2000000
o SEND_ERROR_LOG_LL_WRONG 0x02010000
o SYNC_LEVEL_NOT_SUPPORTED 0x41600810
o TOO_MANY_TPS 0x43020000
o TP_NAME_NOT_RECOGNIZED 0x21600810
o TRANS_PGM_NOT_AVAIL_NO_RETRY 0x00004C08
o TRANS_PGM_NOT_AVAIL_RETRY 0x31604B08
o UNKNOWN_PARTNER_MODE 0x18000000
o UNDEFINED_TP_NAME 0x06050000
ΓòÉΓòÉΓòÉ 3.1.1. APPC Conversations and general information ΓòÉΓòÉΓòÉ
APPC provides two general types of conversations, (i.e., peer-to-peer
communication sessions):
o Basic
A basic conversation provides low level control of the data being
transmitted. A sending program (Transaction Program or TP) can build a buffer
of logical records, with a length for each logical record, and transmit the
entire buffer. The receiving TP can choose to process the buffer as a single
buffer, or to receive ONLY one logical records worth of data.
This provides a great deal of flexibility and power. The receiving program
need not KNOW or CARE how the sending program packaged a particular
transmission. It can choose to process only individual logical records. The
receiving TP would not know how many records were to be processed or their
layout in the buffer, or in fact whether the entire record was sent in a
single or multiple transmissions. The APPC subsystem will do the unblocking
as part of the transmission service.
This is known as 'LL' type reception, and can be specified on any of the
Receive data functions described later.
The other Basic conversation receive option is called 'Buffer'. Using this
option, the receiving TP must provide code to extract a logical record from
the buffer received.
To use either basic conversation reception type requires BOTH the sender AND
receiver TPs to perform special processing. For each logical record in a
transmission buffer, a 2 byte length field must precede the actual data of
the logical record. The length field MUST include the length of the length
field itself. Therefore the minimum logical record size (including length
field) is 2 bytes. In addition, (including this REXX adapter) the layout of
the length field is required to be in 370 data format (i.e., the high-order
byte of the length (in binary) must be at the lowest memory address, this is
backwards from the way it normally is stored on the INTEL architecture
machines.) A length value of 258 decimal would be x'0102' in hex, and should
be stored that way immediately in front of the data. The INTEL layout that we
are all used to would have the data in memory like this x'0201'
Example:
x'0102'data correct layout
x'0201'data incorrect layout
You can use the D2X built-in function to convert a REXX whole number into a
hexadecimal string with the correct layout.
As you will see later, the receive functions return a value called
'what_received'. This value indicates the state of the current logical record
or buffer.
Data_complete A complete logical record has been received. Please note that
this does NOT mean that ALL data sent has been received, only that
the CURRENT logical record has been moved into the TPs application
buffer space by the communications subsystem.
Data_incomplete There was insufficient room in the TPs application buffer
space for the entire logical record. More data for this record
will be received on subsequent receive call(s). There is no way to
determine how many receive calls are required to receive ALL the
data in this logical record, unless the TPs involved have some
prearranged protocol.
Data If you use the 'Buffer' option, this means that data has been
received. How much of the actual transmission is unknown. When no
more data is available, Data_complete will be returned.
o Mapped
A mapped conversation supports transmission and reception of blocks of data.
The receive function used specifies how much data can be received at one
time. There is no logical record format, and the APPC subsystem will not
perform any processing of the data itself. This makes transmission of
complete blocks of data (file copies etc) easy.
For mapped conversations you can not receive 'Data'.
There are additional 'what_received' values when no data has been received,
that indicate the state of the conversation. These are described here for
clarity.
SEND This TP is now in SEND state
CONFIRM The other TP has requested that you confirm its last transmission.
You may use either the 'Confirmed' verb to confirm reception, or
'Send_error' to deny confirmation.
CONFIRM_SEND The remote TP has issued a 'Prepare_to_receive' verb with in
'Confirm' level conversation. You can confirm it (by using the
'Confirmed' verb), and this TP will be placed in SEND state.
Otherwise, this TP will remain in receive state.
CONFIRM_DEALLOCATE The remote TP has requested that the conversation be
terminated. If this TP used 'Confirmed', the session will be ended.
Otherwise the session will continue. The send/receive state of this
TP depends on many things, but can be determined by using the
'Get_attributes' verb.
The Values returned for 'what_received' are:
DATA '256'
DATA_COMPLETE '512'
DATA_INCOMPLETE '1024'
SEND '1'
CONFIRM '2'
CONFIRM_SEND '3'
CONFIRM_DEALLOCATE '4'
These values are the decimal representation of the binary values returned by
the APPC subsystem.
ΓòÉΓòÉΓòÉ 3.2. REXXAPPC Control Verb Functions ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 3.2.1. Receive_allocate ΓòÉΓòÉΓòÉ
APPC( 'Receive_allocate', tpname, stemname )
Allows a 'server' LU to wait for a session request from a 'requester' system.
tpname is the name this server program will be known by. A requester must use
tpname when an Allocate request is made to connect to this server.
to supply a service tp name, enter the EBCDIC value in hex.
'06F3F0F1'x
stemname is the name of a REXX stem variable where info returned from the
Receive_allocate call will be placed.
This function will return one of the following values:
0 Function completed ok
Additional info will be in the variable stemname in the following
order:
stemname.0 tp_ID to be used in subsequent functions on this conversation
stemname.1 conv_ID to be used on subsequent functions on this conversation
stemname.2 sync_level, synchronization level
'N' = None
'C' = Confirm
stemname.3 Conversation Type
'B' = Basic
'M' = Mapped
stemname.4 user_ID, Conversation level user ID of the conversation
initiating program.
stemname.5 LU_alias, Local LU alias name or '' if none.
stemname.6 Partner_LU name, Local name of LU from which the Allocate request
was received.
stemname.7 mode_name, the mode name used on the allocate request.
not 0 error return code from Receive_allocate request.
Note: stemname will be dropped
ΓòÉΓòÉΓòÉ 3.2.2. Tp_started ΓòÉΓòÉΓòÉ
APPC( 'Tp_started' , [ LU_alias ] , tpname, stemname )
Establishes a server program on this system with name tpname. If LU_alias is
supplied it must be one of the LU_alias names established during system
configuration. If LU_alias is not supplied, the configured default LU will be
used.
to supply a service tp name, enter the EBCDIC value in hex.
'06F3F0F1'x
This function returns one of two values:
0 Function Completed ok
Additional info will be in the variable stemname in the following
order:
stemname.0 tp_ID to be used in subsequent functions on this conversation
not 0 error return code from Tp_started request.
Note: stemname will be dropped
ΓòÉΓòÉΓòÉ 3.2.3. Tp_ended ΓòÉΓòÉΓòÉ
APPC( 'Tp_ended' , tp_ID [ , type ] )
Terminates the server program on this system with name tp_ID. the tp_ID value
is returned on the 'Received_allocate' or 'Tp_started' functions.
type can be either of the following, of which only the first character is
significant
'Soft' Ends the TP, but does NOT terminate any active sessions between the
partners
'Hard' Ends the TP, AND terminates any active sessions between the partners.
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Tp_ended request.
ΓòÉΓòÉΓòÉ 3.3. REXXAPPC Conversation Verb Functions ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 3.3.1. Allocate Conversation ΓòÉΓòÉΓòÉ
APPC( 'Allocate' , tp_ID , Partner_LU , Modename , tpname ,
type , Return_control , sync_level , security , stemname )
Create a conversation with server tpname on system Partner_LU using tp_ID as
this applications name in mode Modename.
Partner_LU may be a Local LU Alias, an implicit LU, or a Fully Qualified
Partner LU name (i.e., contains Network_name.LU_name).
to supply a service tp name, enter the EBCDIC value in hex.
'06F3F0F1'x
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
Return_control can contain any of the following values (of which only the first
character is significant)
'Allocated' Return from the function when the conversation is established.
'Immediate' Returns control immediately whether or not the conversation was
established.
'Free' Returns control when a conversation is available, whether or not the
conversation was established.
Sync_level can contain one of the following values (of which only the first
character is significant):
'None' No synchronization verbs are allowed during this conversation
'Confirm' Synchronization verbs ARE allowed during this conversation.
Security may contain one of the following values, which must be complete:
'None' No conversation level Security
'Same' The user ID was verified when the local transaction program was
initiated.
'Pgm U P' The remote LU validates access by examining the Userid string (up to
10 characters with no imbedded spaces) and the Password (up to 10
characters with no imbedded spaces)
Example
'Pgm SOMEUSER SOMEPWD'
Note: The Userid and Password strings should be in upper case. This
can be done with the Translate built-in function.
stemname is the name of a REXX stem variable that will contain additional
information if the allocate request succeeds.
This function returns one of two values:
Note: stemname will be dropped before the call is executed
0 Function Completed ok
stemname.1 conv_ID to be used on subsequent functions on this conversation
not 0 error return code from Allocate request.
additional info is provided as follows:
stemname.2 primary return code
stemname.3 secondary return code
stemname.4 sense data
ΓòÉΓòÉΓòÉ 3.3.2. Confirm ΓòÉΓòÉΓòÉ
APPC( 'Confirm' , tp_ID , conv_ID , type )
Requests the remote application program to confirm (synchronize) the last
transmission. This function will force any buffered data to be sent, and then
wait for a reply from the remote application. To use this function request,
then conversation must have been allocated with a Sync_level of 'Confirm'.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Confirm request.
ΓòÉΓòÉΓòÉ 3.3.3. Confirmed ΓòÉΓòÉΓòÉ
APPC( 'Confirmed' , tp_ID , conv_ID , type )
Sends a positive response to a 'Confirm' request issued by the remote
transaction program. This function request can be used only when a 'Confirm'
request has been received. (see the Receive_ function request)
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Confirmed request.
ΓòÉΓòÉΓòÉ 3.3.4. Convert ΓòÉΓòÉΓòÉ
APPC( 'Convert' , direction , table , expression )
Converts data from one type to another
direction must be one of the following (of which only the first character is
significant)
'Ascii' Convert data from EBCDIC to ASCII
'Ebcdic' Convert data from ASCII to EBCDIC
table must be one of the following
'A' Use the Communications Manager 'A' translate table
'E' Use the Communications Manager 'AE' translate table
'G' Use the Communications Manager 'G' translate table. This table is
user supplied, and MUST be specified as part of the Workstation
Parameters in the Communications Manager Profile.
expression is the data to convert, for example
left(data_receive_from_host,10)
or
data_received_from_host
This function returns either the converted data, or '' in case of error
ΓòÉΓòÉΓòÉ 3.3.5. Deallocate ΓòÉΓòÉΓòÉ
APPC( 'Deallocate' , tp_ID , conv_ID , type, dtype )
Ends the conversation conv_ID.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
dtype must be one of the following (of which only the first character is
significant)
Sync_level the conversation will be deallocated based on the Sync_level
setting.
If Sync_level is 'None' a 'Flush' function will be executed and the
conversation will be ended.
If Sync_level is 'Confirm', a 'Confirm' function will be executed and
the conversation will be terminated only if 'Confirmed'. Otherwise an
error results and the conversation is NOT ended.
'Flush' A 'Flush' function will be executed and the conversation will be
ended.
'Abend' The conversation will be ended abnormally. If the conversation was in
send state, a 'Flush' function will be executed. If in receive state,
data may be purged and/or logical records may be terminated.
If this is a Basic conversation type, 'Abend' is equivalent to
'Abend-Pgm' in the APPC Programmers Reference.
Note: The 'Abend-SVC' and 'Abend-Timer' Basic conversation options
are not supported.
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Deallocate request.
ΓòÉΓòÉΓòÉ 3.3.6. Flush ΓòÉΓòÉΓòÉ
APPC( 'Flush' , tp_ID , conv_ID , type )
Forces any data buffered by the local LU to be sent to the remote LU.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Flush request.
ΓòÉΓòÉΓòÉ 3.3.7. Get_attributes ΓòÉΓòÉΓòÉ
APPC( 'Get_attributes' , tp_ID , conv_ID , type , stemname )
Provides attribute of the specified conversation.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
stemname is the name of a REXX stem variable that will contain additional
information if the allocate request succeeds.
This function returns one of two values:
0 Function Completed ok
stemname.0 net_name
The name of the network containing the local LU
stemname.1 LU_name
The name of the local LU
stemname.2 LU_alias name
The alias name of the local LU
stemname.3 partner_LU_localname
The name the partner LU is known by on this system
stemname.4 partner_LU_netname
The name the partner LU is known by on this network
stemname.5 partner_full_name
The fully qualified name of the partner LU
stemname.6 mode_name
The mode_name in use by this conversation
stemname.7 sync_level in use during this conversation
'N' = None
'C' = Confirm
stemname.8 user_ID
The conversation level userid name (if any) or '' if none
not 0 error return code from Get_attributes request.
Note: stemname will be dropped
ΓòÉΓòÉΓòÉ 3.3.8. Prepare_to_receive ΓòÉΓòÉΓòÉ
APPC( 'Prepare_to_receive' , tp_ID , conv_ID , type , rtype , locks )
Used to change from send state to receive state, in anticipation of data.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
rtype must be one of the following (of which only the first character is
significant)
'Sync_level' the function will be performed based on the synchronization level
set for this conversation.
None A 'Flush' function will be executed prior to entering receive
mode.
Confirm A 'Confirm' function (which includes a Flush function, will be
executed.
If the partner confirms receipt, the function will return in
receive mode.
If the confirm fails, the return code determines the state of the
conversation.
'Flush' A 'flush' function will be performed prior to entering receive mode.
locks specifies when to return control after executing the Confirm function of
this verb. If Sync_level for this conversation is None, then this parameter is
ignored.
locks must be one of the following (of which only the first character is
significant)
'Short' Control is returned immediately after the 'Confirm' function of this
verb is executed.
'Long' Control is returned upon receipt of information or data from the
partner.
This function will return one of two values:
0 Function completed ok
not 0 error return code from Prepare_to_receive request.
ΓòÉΓòÉΓòÉ 3.3.9. Receive_wait ΓòÉΓòÉΓòÉ
APPC( 'Receive_wait' , tp_ID , conv_ID , type , stemname , maxlen )
Used to receive data from the other partner in this conversation.
stemname is the name of a REXX stem variable where info returned from the
Receive_wait call will be placed.
type must be one of the following (of which only the first character is
significant)
'Mapped' Mapped Conversation
'Buffer' Basic conversation with 'Buffer' receive option.
'LL' Basic conversation with 'Logical' record receive option.
This function will return one of two values:
0 Function completed ok
Additional info will be in the variable stemname in the following
order:
stemname.0 a value to indicate what was received.
stemname.1 a value to indicate whether the remote partner sent a 'Request to
Receive' direction change request as well as data.
stemname.2 the data received if stemname.0 indicates either
Data (for basic conversations only)
Data_complete
Data_incomplete
not 0 error return code from Receive_wait request.
ΓòÉΓòÉΓòÉ 3.3.10. Receive_immediate ΓòÉΓòÉΓòÉ
APPC( 'Receive_immediate' , tp_ID , conv_ID , type , stemname , maxlen )
Used to receive data from the other partner in this conversation.
stemname is the name of a REXX stem variable where info returned from the
Receive_immediate call will be placed.
type must be one of the following (of which only the first character is
significant)
'Mapped' Mapped Conversation
'Buffer' Basic conversation with 'Buffer' receive option.
'LL' Basic conversation with 'Logical' record receive option.
This function will return one of two values:
0 Function completed ok
Additional info will be in the variable stemname in the following
order:
stemname.0 a value to indicate what was received.
stemname.1 a value to indicate whether the remote partner sent a 'Request to
Receive' direction change request as well as data.
stemname.2 the data received if stemname.0 indicates either
Data (for basic conversations only)
Data_complete
Data_incomplete
not 0 error return code from Receive_immediate request.
type must be one of the following (of which only the first character is
significant)
'Mapped' Mapped Conversation
'Buffer' Basic conversation with 'Buffer' receive option.
'LL' Basic conversation with 'Logical' record receive option.
queue_name is the name of an external data queue where info returned from the
Receive_post call will be placed.
This function will return one of two values:
0 Function processing started
when this function completes, the following info will be placed on
the external data queue queue_name:
a line consisting of the following data
conv_ID what_received request_to_receive_requested
where
conv_ID is the conversation ID that returned this information
what_received indicates what information was received
either '0' or '1' to indicate if the partner has requested to receive
information.
If what_received indicates Data (for basic conversations only), Data_complete
or Data_incomplete, then an additional record will be placed on the queue
following (fifo) the information recorded above.
not 0 error return code from Receive_post request.
ΓòÉΓòÉΓòÉ 3.3.11. Request_to_send ΓòÉΓòÉΓòÉ
APPC( 'Request_to_send' , tp_ID , conv_ID , type )
Requests permission to send data to the remote LU.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Request_to_send request.
ΓòÉΓòÉΓòÉ 3.3.12. Send_Conversation ΓòÉΓòÉΓòÉ
APPC( 'Send_Conversation' , tp_ID , Partner_LU , Modename , tpname , type, Return_control ,
security , data, [ Conv_Group_Id ] , stemname)
Create a conversation with server tpname on system Partner_LU using tp_ID in
Mode Modename, sends data and then deallocates the conversation without
confirmation.
Partner_LU may be a Local LU Alias, an implicit LU, or a Fully Qualified
Partner LU name (i.e., contains Network_name.LU_name).
to supply a service tp name, enter the EBCDIC value in hex.
'06F3F0F1'x
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
Return_control can contain any of the following values (of which only the first
character is significant)
'Allocated' Return from the function when the conversation is established.
'Immediate' Returns control immediately whether or not the conversation was
established.
'Free' Returns control when a conversation is available, whether or not the
conversation was established.
'ConWinner' Returns control when the first contention-winner session becomes
available
'Group' Allocates a specific session specified by the Conv_Group_Id parameter
Note: If 'Group' is specified then Conv_Group_Id MUST be supplied
Security may contain one of the following values, which must be complete:
'None' No conversation level Security
'Same' The user ID was verified when the local transaction program was
initiated.
'Pgm U P' The remote LU validates access by examining the Userid string (up to
10 characters with no imbedded spaces) and the Password (up to 10
characters with no imbedded spaces)
Example
'Pgm SOMEUSER SOMEPWD'
Note: The Userid and Password strings should be in upper case. This
can be done with the Translate built-in function.
stemname is the name of a REXX stem variable that will contain additional
information if the allocate request succeeds.
This function returns one of two values:
Note: stemname will be dropped before the call is executed
0 Function Completed ok
stemname.1 Conv_Group_ID if Return_type is NOT 'Group'
not 0 error return code from Allocate request.
additional info is provided as follows:
stemname.2 primary return code
stemname.3 secondary return code
stemname.4 sense data
ΓòÉΓòÉΓòÉ 3.3.13. Send_data ΓòÉΓòÉΓòÉ
APPC( 'Send_data' , tp_ID , conv_ID , type , data)
Sends data to the remote application program.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Send_data request.
ΓòÉΓòÉΓòÉ 3.3.14. Send_error ΓòÉΓòÉΓòÉ
APPC( 'Send_error' , tp_ID , conv_ID , type , layer )
Sends an error indication to the remote LU.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
layer must be one of the following (of which only the first characteis
significant)
'Program' This error was detected by the application programming level
'Service' This error was detected by the LU service program layer
An LU Service Program is a transaction program that is written to provide
services to other programs at your LU. Example LU service programs include the
SNA distribution system (SNA/DS), the APPC Mapped Conversation Support, and
Distributed Data Management (DDM).
The basic conversation interface is intended for LU service programs. It has
extended features that are very valuable in this environment.
o You can build architected records called general data stream (GDS) variables.
o You can send or receive more than one data record in a single buffer with a
single verb.
o You can provide a unique or optimized mapped conversation interface (good for
protocol converters).
o You can provide a log data GDS variable when reporting an error (aids in
problem determination).
o You can distinguish between errors detected by your program and errors
detected by your program's user.
The LAYER parameter of SEND_ERROR is intended to provide this last feature.
It indicates where the error was detected. If the error was detected by the
program that uses your LU service program, specify Program. If the error was
detected by your LU service program, specify Service.
The intent is to control the error recovery procedures at the partner LU.
If the error was detected by the program that uses your LU service program, the
error was in something outside the scope of your program. Therefore, the error
recovery is also outside the scope of your program. At the partner LU, the
error indication is passed up to the program which is using the partner LU
service program.
If the error was detected by your LU service program, the error and its
recovery are within the scope of the service. The error can be reported and
recovery procedures completed without bothering the users at either LU.
When you want to inform the partner program about the type of error detected
(internal programming error, invalid request, unrecognized parameter, e.t.c),
build a special data record which contains this information and use SEND_DATA
to send it as the first data record after a SEND_ERROR request.
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Send_error request.
ΓòÉΓòÉΓòÉ 3.3.15. Test_rts ΓòÉΓòÉΓòÉ
APPC( 'Test_rts' , tp_ID , conv_ID , type )
Used to determine if the remote LU has requested to send data.
type must be one of the following (of which only the first character is
significant)
'Basic' Basic conversation
'Mapped' Mapped Conversation
This function returns one of two values:
0 Function Completed ok
not 0 error return code from Test_rts request.
ΓòÉΓòÉΓòÉ 3.3.16. Trans_table ΓòÉΓòÉΓòÉ
APPC( 'Trans_table', table_type )
Used to set different translate tables to be used for any data translations
required internally. The default Table is 'E' (AE).
table_type must be one of the following
'A' Use the Communications Manager 'A' translate table
'E' Use the Communications Manager 'AE' translate table (DEFAULT)
'G' Use the Communications Manager 'G' translate table. This table is
user supplied, and MUST be specified as part of the Workstation
Parameters in the Communications Manager Profile.
This function returns one value:
0 Function Completed ok
ΓòÉΓòÉΓòÉ 3.4. Sample Programs ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 3.4.1. Client ΓòÉΓòÉΓòÉ
This is a sample 'requester' TP program in REXX.
/* */
/* REXX/APPC transaction program sample (requester) */
/* */
trace off
/* */
/* Tell Rexx that there is a new function available */
/* */
CALL RXFUNCADD APPC,SAAAPPC,APPCSRV
/* */
/* start a Transaction Pgm (i.e., tell APPC we're here and running)*/
/* */
rc=appc('Tp_started',,'TP1','Lu1s.')
if rc=0 then do
tpid=lu1s.0 /* save the transaction pgm id */
/* */
/* Open (allocate) a conversation with Transaction pgm (TP) TP2 */
/* which is located on Node prompted for */
/* Note the Userid and Password data format. */
/* */
say 'Enter Partner LU name'
pull plu .
rc=appc('Allocate',lu1s.0,plu,'#BATCH','TP2','MAPPED','A','N', 'N','Lu1P.')
if rc=0 then do
convid=lu1p.1 /* save the conversation id */
/* */
/* Lets send some data ('Hello from tp1') to our partner */
/* */
/* Note: as this is a 'Mapped' conversations, the length info */
/* is NOT part of the actual data. */
/* */
rc=appc('Send_data',tpid,convid,'Mapped','Hello from tp1')
/* */
/* Now Lets receive send some data from our partner */
/* Our partner will have to turn the conversation around */
/* */
rc=appc('Receive_wait',tpid,convid,'Mapped','data.',1000)
say data.2
end
else Say 'Allocate failed rc=' c2x(Lu1P.2) 'Secondary rc=' c2x(Lu1P.3) 'Sense=' c2x(Lu1p.4)
/* */
/* Well, we're done now. So tell APPC we're done. APPC */
/* will close the conversation. */
/* */
rc=appc('Tp_ended',tpid)
end
else do
say 'Communications manager has not been started'
say 'or is not configured for APPC'
end
ΓòÉΓòÉΓòÉ 3.4.2. Server ΓòÉΓòÉΓòÉ
This is a sample 'server'TP program in REXX.
/* */
/* REXX/APPC transaction program sample (server) */
/* */
trace off
/* */
/* Tell Rexx that there is a new function available */
/* */
CALL RXFUNCADD APPC,SAAAPPC,APPCSRV
/* */
/* Tell APPC that we are TP2 and we're ready to talk to any other */
/* TP that calls us. */
/* */
rc=appc('Receive_allocate','TP2','Lu2s.')
tpid=lu2s.0 /* save the TP ID */
convid=lu2s.1 /* and conversation ID */
ConvType=Lu2s.3 /* get Conversation type (Basic/Mapped) */
/* */
/* Lets receive some data from our partner. */
/* */
/* Note: This is a 'Mapped' Conversation. */
/* */
rc=appc('Receive_wait',tpid,convid,ConvType,'data.',1000)
say data.2
/* */
/* We have the data. In this sample, we know there is no more */
/* data coming, so a receive_immediate will turn the line around. */
/* In reality one should check the state after the receive_wait */
/* to see if all the data was received, and check again after */
/* the receive_immediate. */
/* */
/* But were skimping here, cause its only a sample */
/* */
rc=appc('Receive_immediate',tpid,convid,ConvType,'data1.',1000)
/* */
/* We should be in 'SEND' state now, that means WE can SEND */
/* data1.0 should contain 'SEND' as what_received */
/* */
rc=appc('Send_data',tpid,convid,ConvType,'Hello from tp2')
/* */
/* OK, data sent. Now we are done. */
/* Tell APPC that this transaction is complete. */
/* */
/* This could be a 'do forever' loop processing single */
/* transmissions from multiple requestors one at a time. */
/* */
/* */
rc=appc('Tp_ended',tpid)
'exit'