/*************************************************************/
/*  This program is provided on an "AS IS" basis, without    */
/*  warranties or conditions of any kind, either express or  */
/*  implied including, without limitation, any warranties    */
/*  or conditions of title, non-infringement,                */
/*  merchantability or fitness for a particular purpose.     */
/*  Neither recipient nor any contributors shall have any    */
/*  liability for any direct, indirect, incidental,          */
/*  special, exemplary, or consequential damages (including  */
/*  without limitation lost profits), however caused and on  */
/*  any theory of liability, whether in contract, strict     */
/*  liability, or tort (including negligence or otherwise)   */
/*  arising in any way out of the use or distribution of     */
/*  the program or the exercise of any rights granted        */
/*  hereunder, even if advised of the possibility of such    */
/*  damages.                                                 */
/*************************************************************/
/* References:                                               */
/*  The Virtualization Cookbook for Linux on IBM z Systems   */
/*  URL: http://www.ibm.com/vm/pubs/redbooks/SG248147        */
/*************************************************************/
 
/* Call the SMAPI server via IUCV. Set UseridTarget variable. */
sockIucvUser = 'VSMREQIU'
sockIucvName = 'DMSRSRQU'
 
 seridTarget = "LINUX7"
 seridTarget = "IBMDFLT"
 seridTarget = "XYZABVT"
 seridTarget = "LINUX7"
 seridTarget = "RSC"
 seridTarget = "MAINT"
 seridTarget = "TSAFVM"
 seridTarget = "VMSERVU"
 seridTarget = "SMAPC05B"
 seridTarget = "SMAPC05D"
useridTarget = "MAINT"
 seridTarget = "TESTCB2"  /*Identity with subconfig */
 seridTarget = "TESTCB2S" /* subconfig */
 seridTarget = "TESTCB3"  /* User */
 seridTarget = "TESTCB4"  /*Identity without subconfig */
 seridTarget = "TESTCB9"
 
numeric digits 12
/* Set up */
call apiload 'VMREXOVM'
 
/* GET EBCDIC TO ASCII TRANSLATION TABLES */
 
Call CSL 'DTCXLATE',
              XLRc,
              XLRs,
              09240923,
              ascii2ebcdic,
              ebcdic2ascii,
              crlf
/*
request = preflen(preflen(eb2as('Image_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget)))
 
 
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('* PASSWORD'||'00'x)))
 
               " password=testpw"||'00'x ,
          || preflen(eb2as("STORAGE_MAXIMUM=z"||'00'x           ,
*/
 
/*************************************************************/
/* request parms below                                       */
/*************************************************************/
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'LINK=USERID=Mazzz vdev1=0996 vdev2=209'||,
                                   '00'x ,
             )))
 
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'DEDICATE=VDEV=234 RDEV=234 USERACCESSID=FRED'||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "IPL=vdev=cms loADPARM='''''A''''B'''''"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('OPTION'||'00'x)))
 
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "OPTION= c ff m 45"||,
                                   '00'x ,
             )))
 
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_INITIAL=128M"||,
                                   '00'x ,
             )))
 
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_MAXIMUM"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "IPL=vdev=cms loADPARM='''''A''''B'''''"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "PRIVILEGE_CLASSES=BF"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "SHARE=absolute=5% relative=6"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "OPTION=         "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "CONSOLE=VDEV=009 DEVTYPE=3270 CLASS=T USERID=SMAPC05B"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "CONSOLE=        "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "CONSOLE=VDEV=009 DEVTYPE=3270 CLASS=w                "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "SHARE=absolute=5% relative=6"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_SET_SHARE=userid=smapc02c type=cp "||,
             "operand=absolute relative=50  relative_max=10 "||,
             "limit=limitsoft"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "MDISK=OPERATION=MODEPW VDEV=200"||,
             " READPASSWORD=test multipassword=testm"  '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "MDISK=OPERATION=add      VDEV=200 mode=w "||,
             " disktype=v-disk devtype=3380 "            '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "IPL=VDEV=CMS                             "||,
             "                              "            '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "IPL=VDEV=CMS                             "||,
             "                              "            '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_SET_SHARE=userid=smapc02c         "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('*     '||'00'x)))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "OPTION==ACCT     "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_INITIAL= =1M "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "PRIVILEGE_CLASSES=       AD    "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "CONSOLE=        "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_DEFINE_CPU=cpuaddr= 05- 21                "||,
                 "        "||'00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'DEDICATE=VDEV=234 volid=xyz USERACCESSID=FRED'||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'NICDEF=VDEV=245 type=inmn                  '||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "OPTION= LXAPP    "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('* PASSWORD'||'00'x)))
 
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('*     '||'00'x)))
 
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "MDISK=OPERATION=add      VDEV=200 mode=w "||,
             " disktype=AUTOG  devtype=xxxx COUNT=10 "||,
             " name=gna#@$"||'00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('* PASSWORD'||'00'x)))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "CONSOLE=VDEV=009 DEVTYPE=3270 CLASS=w                "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'DEDICATE=VDEV=234 RDEV=234 USERACCESSID=FRED'||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "IPL=vdev=cms loADPARM='''''A''''B'''''"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'LINK=USERID=Mazzz vdev1=0996 vdev2=209'||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "MDISK=OPERATION=MODEPW VDEV=200"||,
             " READPASSWORD=test multipassword=testm"  '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "MDISK=OPERATION=add      VDEV=200 mode=w "||,
             " disktype=v-disk devtype=FB-512 count=10"    '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "SHARE=absolute=5%           "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_INITIAL=12M"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_SET_VCONFIG=MODE=LINUX "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_SET_SHARE=userid=smapc02c type=cp "||,
             "operand=relative relative=6   relative_max=10 "||,
             "limit=limitsoft"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_DEFINE_CPU=cpuaddr= 05-06                 "||,
                 "        "||'00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_MAXIMUM=                    "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('*     '||'00'x)))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_SET_CPUAFFINITY=userid=*       "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "COMMAND_SET_CPUAFFINITY=CPUAFFINITY=ON "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_MAXIMUM=128M"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             "STORAGE_INITIAL=148M"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('System_Performance_Threshold_Enable')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget)) )
request = preflen(preflen(eb2as('System_Performance_Threshold_Disable')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || eb2as("User_CPU"||,
                                   '00'x ,
              ))
request = preflen(preflen(eb2as('Metadata_Delete')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget)))
   /*     || preflen(eb2as(           ,
             "STORAGE_INITIAL=148M"||,
                                   '00'x ,
             ))) */
request = preflen(preflen(eb2as('Event_Subscribe')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget)) )
request = preflen(preflen(eb2as('System_Performance_Threshold_Disable')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || eb2as("User_CPU"||,
                                   '00'x ,
              ))
request = preflen(preflen(eb2as('Image_Definition_Async_Updates')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget)))
request = preflen(preflen(eb2as('System_Performance_Threshold_Enable')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || eb2as("User_IO=MAINT 900 10"||,
                                   '00'x ,
              ))
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
  "SPOOL=VDEV=0f3 devtype=rdr width=hc"||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Delete_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
  "SPOOL=VDEV=0f4                     "||,
                                          '00'x,
             )))
request = preflen(preflen(eb2as('Image_Definition_Create_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
  "SPOOL=VDEV=0f4 devtype=3800 class=d  width=1f length=11   "||,
                                          '00'x||,
  "system_unique=yes  "||,
                                           '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('* '||'00'x)))
request = preflen(preflen(eb2as('Image_Definition_Create_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
  "vmrelocate=                                               "||,
                                          '00'x||,
  "MDISK="||,
      "vdev=a               "||,
      "devtype=xxxx "||,
      "disktype=AUTOR "||,
      "NAME=ABC "||,
      "count=1000 mode=w "||,
      "readpassword=readpass "||,
      "writepassword=writpass "||,
      "multipassword=multpass "||,
                                          '00'x||,
  "system_unique=no   "||,
                                           '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Create_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
             'NICDEF=VDEV=245 type=inmn                  '||,
              "DEVICES=1 "||,
              "LAN=* "||,
              "LANNAME=TEST "||,
              "SWITCHNAME=TEST "||,
              "CHPID=10 "||,
              "MACID=11 "||,
                                   '00'x ,
             )))
 
request = preflen(preflen(eb2as('Image_Name_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget)))
 
request = preflen(preflen(eb2as('Image_Definition_Update_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as(           ,
  "SPOOL=VDEV=333 devtype=3800 class=a width=01 length=13 "||,
  " CHARACTER_GENERATION_MODULES=4 STACKER=CONTINUOUS "||,
  " CP_PROCESS_DATA_CHECK=NO                          "||,
                                   '00'x ,
             )))
request = preflen(preflen(eb2as('Image_Definition_Query_DM')),
          || preflen(eb2as('')),
          || preflen(eb2as('')) ,
          || preflen(eb2as(UseridTarget))  ,
          || preflen(eb2as('* '||'00'x)))
/* ???? */
/* Create a socket */
domain = 17
type = 1
protocol = 0
dimension = 1
/*
say
say 'calling socket()'
*/
address openvm 'BPX1SOC domain type protocol dimension sockVec retValue',
      'retCode reasCode'
if retValue <> 0 then ,
   say 'returned from socket() BPX1SOC rc,retvalue ='rc','retValue
if rc \= 0 then
   exit
if retValue \= 0 then
   do
      say 'SMAPI retCode =' retCode
      say 'SMAPI reasCode =' reasCode
      exit
   end
sockId = c2d(substr(sockVec, 1, 4))
/* say 'sockId =' sockId */
 
/* Connect to the SMAPI server */
sockLen = 32
sockFamily = 17
sockIucvPort = 0
sockIucvAddr = 0
sockIucvNode = ''
sockAddr = d2c(sockLen, 1) || d2c(sockFamily, 1) || d2c(sockIucvPort, 2),
      || d2c(sockIucvAddr, 4) || left(sockIucvNode, 8) ||,
      left(sockIucvUser, 8) || left(sockIucvName, 8)
   say
 
/*
say 'calling connect() with socket id:'sockId' length:'sockLen
 
say 'socket data:'sockAddr
*/
address openvm 'BPX1CON sockId sockLen sockAddr retValue retCode',
      'reasCode'
/*
   say 'returned from connect() BPX1CON rc,retvalue ='rc','retValue
*/
if rc \= 0 then
   exit
if retValue \= 0 then
   do
      tag = ''
      if retCode = 1128 then
         tag = ' (ECONNREFUSED)'
      say 'SMAPI retCode =' retCode || tag' reasonCode='reasCode
      exit
   end
 
/* Send the request */
 
 
 
/* say '<'as2eb(request)'>' */
/*say ' ' */
/*say 'request data of 'length(request)' bytes:'as2eb(request)*/
/* say 'request data ascii hex 'c2x(request) */
 
do while length(request) > 0
   buff = request
   buffLen = length(buff)
   say
   say '                     buffLen =' buffLen
call dumpit request
say ' '
   alet = 0
   flags = 0
     say 'calling send() '
   address openvm 'BPX1SND sockId buffLen buff alet flags retValue',
         'retCode reasCode'
/*
   say 'returned from send() rc,retvalue ='rc','retValue
*/
   if rc \= 0 then
      exit
   if retValue = -1 then
      do
         say 'SMAPI retCode =' retCode' reasonCode='reasCode
         exit
      end
   else if retValue = 0 then
      exit
   request = substr(request, retValue + 1)
end
 
/* Receive the request ID */
response = ''
respLen = 4
do while length(response) < respLen
   buffLen = respLen - length(response)
   say 'receiving requestId,  buffLen =' buffLen /* */
   alet = 0
   flags = 0
   address openvm 'BPX1RCV sockId buffLen buff alet flags retValue',
         'retCode reasCode'
/* */
   say 'returned from recv() rc,retvalue ='rc','retValue
/* */
   if rc \= 0 then
      exit
   if retValue = -1 then
      do
         say 'SMAPI retCode =' retCode' reasonCode='reasCode
         exit
      end
   else if retValue = 0 then
      exit
   response = response || substr(buff, 1, retValue)
end
/* say 'Request id: c2x(response) =' c2x(response)*/
say 'Request id:=' c2d(response)
 
/* Receive the length */
response = ''
respLen = 4
say ' '
do while length(response) < respLen
   buffLen = respLen - length(response)
   say 'receiving length, buffLen =' buffLen
   alet = 0
   flags = 0
   address openvm 'BPX1RCV sockId buffLen buff alet flags retValue',
         'retCode reasCode'
   say 'returned from recv() rc,retvalue ='rc','retValue
   if rc \= 0 then
      exit
   if retValue = -1 then
      do
         say 'SMAPI retCode =' retCode' reasonCode='reasCode
         exit
      end
   else if retValue = 0 then
      exit
   response = response || substr(buff, 1, retValue)
end
 
/* Receive the rest of the response */
respLen = c2d(response)
response = ''
do while length(response) < respLen
   buffLen = respLen - length(response)
   say 'receiving data, buffLen =' buffLen
   alet = 0
   flags = 0
   address openvm 'BPX1RCV sockId buffLen buff alet flags retValue',
         'retCode reasCode'
   say 'returned from recv() rc,retvalue ='rc','retValue
   if rc \= 0 then
      exit
   if retValue = -1 then
      do
         say 'SMAPI retCode =' retCode' reasonCode='reasCode
         exit
      end
   else if retValue = 0 then
      exit
   response = response || substr(buff, 1, retValue)
end
/*
say 'Rest of the returned buffer data: as2eb(response) =' as2eb(response)
*/
/*say 'Rest of the returned buffer data: c2x(response) =' c2x(response)*/
/*
say "Request id:x'"c2x(substr(response,1,4))"'"||,
 c2d(substr(response,1,4)) ||,
    " Return code:x'"c2x(substr(response,5,4))"'"||,
     c2d(substr(response,5,4))||,
    " Reason code:x'"c2x(substr(response,9,4))"'" c2d(substr(response,9,4))
*/
 
 
/*************************************************************/
/*                                                           */
/*************************************************************/
say " "
say "Request id:" c2d(substr(response,1,4)) ||,
    " Return code:"c2d(substr(response,5,4))||,
    " Reason code:"c2d(substr(response,9,4))||,
    " possible outdata len:"c2d(substr(response,13,4))
 
say " "
dataleft = substr(as2eb(response),17)
lengthLeft = length(dataleft)
if lengthLeft <= 0 then say "No extra output data"
 
  parse var dataleft itemdata '00'x more
  Do While lengthLeft > 1
    lengthLeft = lengthleft - (1 + length(itemdata))
    say '<'itemdata'>'
    parse var more itemdata '00'x more
  end
 
/* Close the socket */
/*
say
say 'calling close()' */
address openvm 'BPX1CLO sockId retValue retCode reasCode'
/*say 'returned from close() rc,retvalue ='rc','retValue*/
if rc \= 0 then
   exit
if retValue \= 0 then
   do
      say 'SMAPI retCode =' retCode' reasonCode='reasCode
      exit
   end
 
/* Exit */
exit
 
 
/* Function to prefix data with its four-byte length */
prefLen: procedure
parse arg data
/* say 'length of data is:'length(data)*/
return d2c(length(data), 4) || data
 
/* Function to dump ascii  data */
dumpit: procedure expose ascii2ebcdic
parse arg data
start = 1
length = length(data)
do while length > 0
  getbytes = 16
  if length < getbytes then getbytes = length
  charData = as2eb(substr(data,start,16,x2c(20)))
  hexData = c2x(substr(data, start, getbytes))
  hexData = left(hexdata, 32, ' ')
  hexOut = substr(hexData,1,8) substr(hexData, 9,8) substr(hexData,17,8),
           substr(hexdata, 25,8)
  say right((start-1),4,'0')||' '||hexOut||' * 'charData' *'
  start = start + 16
  length = length -16
 
end
return
 
/**********************************/
eb2as: procedure expose ebcdic2ascii
Parse Arg e_data
 
  'PIPE (Endchar ?)'  ,
    'Var e_data'     ,
    '| xt: Xlate'     ,
    '| Var a_data'   ,
    '?'               ,
    'Var ebcdic2ascii',
    '| xt:'
 
Return a_data
 
/**********************************/
as2eb: procedure expose ascii2ebcdic
Parse Arg a_data
 
  'PIPE (Endchar ?)'  ,
    'Var a_data'     ,
    '| xt: Xlate'     ,
    '| Var e_data'   ,
    '?'               ,
    'Var ascii2ebcdic',
    '| xt:'
 
Return e_data