Examples of the IMFEXEC IMFC command


This section contains examples that use the IMFEXEC IMFC command statement.

A brief discussion follows each example.

Warning

Note

Remember that the IMFC statement does not return a value in IMFNOL.

Example 1

This example shows a REXX EXEC issuing the IMFC OSTAT service.

/* REXX */

LAST = '' /* FOR THE FIRST TIME */

LOOP:

IF LAST = '' THEN 'IMFEXEC IMFC OSTAT LTERM=B* TARGET=IMS41X'
ELSE 'IMFEXEC IMFC OSTAT LTERM=B* START='LAST' TARGET=IMS41X'

I = 4
DO WHILE I <= 24
 'IMFEXEC VGET LINE'I' LOCAL'
 IF SUBSTR(VALUE('LINE'I),67,9) = 'CONNECTED' THEN
 DO
 TERM = SUBSTR(VALUE('LINE'I),2,8)
 IF 'LINE'I = 'LINE24' THEN NOP /* LINE24 WILL BE INCLUDED IN NEXT */
 ELSE
 'IMFEXEC MSG 'TERMINAL 'TERM' IS NOT CONNECTED''
 END
ELSE NOP
I = I + 1
END
LAST = SUBSTR(VALUE('LINE24'),2,8) /* LAST TERMINAL ON THE SCREEN */

IF LAST ,= '' THEN SIGNAL LOOP;
ELSE EXIT

The EXEC loops until there is no more data and checks the terminals with the status: NOT CONNECTED. For these terminals, it issues message on the BBI LOG.

CLIST example:

PROC 0

SET &LAST = ''
LOOP: +
IF &LAST = '' THEN IMFEXEC IMFC OSTAT LTERM=B* TARGET=IMS41X
ELSE IMFEXEC IMFC OSTAT LTERM=B* START=&LAST TARGET=IMS41X
SET &I = 4
DO WHILE &I <= 24
  IMFEXEC VGET LINE&I LOCAL
  IF &SUBSTR(&SYSNSUB(2,&&LINE&I),67,9) = 'CONNECTED' THEN DO
     TERM = &SUBSTR(&SYSNSUB(2,&&LINE&I),2,8)
     IF &&LINE&I = 'LINE24' THEN NOP
     ELSE
     IMFEXEC MSG 'TERMINAL &TERM IS NOT CONNECTED'
     END
  ELSE NOP
SET &I = &I + 1
END
SET &LAST = &SUBSTR(&LINE24,2,8)
IF &LAST [= '' THEN GOTO LOOP;
ELSE EXIT

Example 2

This example shows a REXX EXEC that issues the IMFC USER service with a parameter of RESPINP. The RESPINP parameter is used for IMS terminals in response input mode. The USER service is a scrollable service.

/* REXX */
'IMFEXEC VGET QIMSNAME'
'IMFEXEC IMFC USER RESPINP TARGET='QIMSNAME' IMAGE=NO'
DO I = 8 TO 43
 'IMFEXEC VDCL IMFL'I' LIST(V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11)'
 'IMFEXEC VGET LINE'I' INTO(IMFL'I') LOCAL'
 'IMFEXEC MSG .. 'V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11'''
 IF SUBSTR(V1,1,3) = '***' THEN EXIT
END
DO 900
   'IMFEXEC IMFC USER RESPINP TARGET='QIMSNAME' IMAGE=NO SCROLL=YES'
   DO I = 8 TO 43
   'IMFEXEC VDCL IMFL'I' LIST(V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11)'
   'IMFEXEC VGET LINE'I' INTO(IMFL'I') LOCAL'
   'IMFEXEC MSG .. 'V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11'''
   IF SUBSTR(V1,1,3) = '***' THEN EXIT
   END
END

The REXX EXEC scheduled with the SELECT command, FREERSP, issues IMS commands to display, stop, dequeue and start the terminals. Note that for multiple screens of data returned, the IMFC service returns the screen in local variables LINE8 through LINE43, and then places the next screen in the same variables, LINE8 through LINE43.

CLIST example:

PROC 0
IMFEXEC VGET QIMSNAME
IMFEXEC IMFC USER RESPINP TARGET=&QIMSNAME IMAGE=NO
DO I = 8 TO 43
  IMFEXEC VDCL IMFL&I LIST(V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11)
  IMFEXEC VGET LINE&I INTO(IMFL&I) LOCAL
IF &SUBSTR(&V1,1,3) = '***' THEN EXIT
END
SET &END = NO
DO UNTIL &END = YES
   IMFEXEC IMFC USER RESPINP TARGET=&QIMSNAME IMAGE=NO SCROLL=YES
   DO I = 8 TO 43
    IMFEXEC VDCL IMFL&I LIST(V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11)
    IMFEXEC VGET LINE&I INTO(IMFL&) LOCAL
   IF &SUBSTR(&V1,1,3) = '***' THEN SET &END = YES   END
END

 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*

MainView AutoOPERATOR 8.1