Q: Is there any way to identify a job as being an active Telnet job? Here's my situation: I have some users who start a Telnet session to attach to a remote system. When they sign off that remote system, I'd like to be able to SIGNOFF ENDCNN(*YES). If they are not in a Telnet job, then I'd like to use ENDCNN(*NO).
A: The QDCRDEVD API with format DEVD0600 returns detailed information about a display device. One of the fields tells you whether the job is a telnet job.
The following CL program determines whether the current job is a Telnet job. If it is, it returns '1'; otherwise, it returns '0'.
PGM PARM(&ISTELNET)
DCL VAR(&ISTELNET) TYPE(*LGL) VALUE('0')
DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(1000)
DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4)
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN(8)
DCL VAR(&DEVNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBTYPE) TYPE(*CHAR) LEN(1)
/* MAKE SURE THAT THIS IS AN INTERACTIVE JOB, AND +
GET THE DEVICE'S NAME */
RTVJOBA JOB(&DEVNAME) TYPE(&JOBTYPE)
IF (&JOBTYPE *NE '1') DO
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('This +
must be run from an interactive job!') +
MSGTYPE(*ESCAPE)
ENDDO
/* CALL THE RETRIEVE DEVICE DESCRIPTION (QDCRDEVD) API +
WITH FORMAT 'DEVD0600' WHICH SPECIES "DISPLAY DEVICE +
DETAILS" */
CHGVAR VAR(%BIN(&ERRCODE 1 4)) VALUE(0)
CHGVAR VAR(%BIN(&RCVLEN)) VALUE(1000)
CALL PGM(QDCRDEVD) PARM(&RCVVAR +
&RCVLEN +
'DEVD0600' +
&DEVNAME +
&ERRCODE)
/* POSITION 831 IS THE "PASS-THROUGH INDICATOR" AND IT +
WILL HAVE ONE OF THE FOLLOWING VALUES: +
'0' = NOT A PASSTHROUGH JOB +
'1' = 5250 PASSTHROUGH +
'2' = VIRTUAL DEVICE ASSOC WITH VIRTUAL TERMINAL APIS +
'3' = VIRTUAL DEVICE ASSOC WITH TELNET SESSION +
'4' = VIRTUAL DEVICE ASSOC WITH STRPASTHR COMMAND */
IF (%SST(&RCVVAR 831 1) *EQ '3') DO
CHGVAR VAR(&ISTELNET) VALUE('1')
ENDDO
ELSE DO
CHGVAR VAR(&ISTELNET) VALUE('0')
ENDDO
ENDPGM