/*************************************************************/ /* 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