home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / cpicsamp.zip / chat.cmd < prev    next >
OS/2 REXX Batch file  |  1995-02-22  |  34KB  |  846 lines

  1. /*       this is a REXX shell                                        */
  2. /* *******************************************************************/
  3. /*                                                                   */
  4. /* MODULE NAME:              chat                                    */
  5. /*                                                                   */
  6. /* MODULE TYPE:              CPI-C REXX EXEC                         */
  7. /*                                                                   */
  8. /* Source Library:           $WKS.APPC.CNTL                          */
  9. /*                                                                   */
  10. /* MODULE AUTHORIZATION:     NONE                                    */
  11. /*                                                                   */
  12. /* ABENDS:                   NONE                                    */
  13. /*                                                                   */
  14. /* FUNCTION:                This is an exec that supports cpi-c calls*/
  15. /*                          in the TSO/E and the OS/2 environments.  */
  16. /*                          It is designed as an interactive chat    */
  17. /*                          with an appc partner.                    */
  18. /*                          The TPNAME can be overriden in the exec. */
  19. /*                                                                   */
  20. /*                                                                   */
  21. /* PARAMETERS:              a) none -- accept a conversation and     */
  22. /*                                     act accordingly               */
  23. /*                          b) symdest//tpname/ cmdstring            */
  24. /*                                                                   */
  25. /*                                                                   */
  26. /*                                                                   */
  27. /*                          example:                                 */
  28. /*                                                                   */
  29. /*                           %chat runblk                            */
  30. /*                           data to send                            */
  31. /*                           more data to send                       */
  32. /*                           /over                                   */
  33. /*                           second batch of data to send            */
  34. /*                           more of the second                      */
  35. /*                           /over                                   */
  36. /*                           /end                                    */
  37. /*                                                                   */
  38. /*                           %chat runl499/USA.xxxxxx.SPEAK    */
  39. /*                                                                   */
  40. /*                                                                   */
  41. /*                                                                   */
  42. /* INTERNAL TABLES:         none                                     */
  43. /*                                                                   */
  44. /* CALLED MODULES:          the CPICOMM environment modules:         */
  45. /*                             CMINIT CMALLC CMSEND CMRECV etc.      */
  46. /*                                                                   */
  47. /*                                                                   */
  48. /* CALLING MODULES/Env(s):  Tsobatch                                 */
  49. /*                          Tso                                      */
  50. /*                          Batch                                    */
  51. /*                          NCCF exec                                */
  52. /*                          Boole exec                               */
  53. /*                          Tsobatch under ASCH init(s)              */
  54. /*                                                                   */
  55. /*                          OS/2 attach manager (rel 2.1)            */
  56. /*                                                                   */
  57. /* PROGRAM FLOW:            This is a "State" driven process:        */
  58. /*                                                                   */
  59. /*                          State:       activity:                   */
  60. /*                                                                   */
  61. /*                          reset        cmaccp or cminit            */
  62. /*                          initialize   cmallc                      */
  63. /*                          send         cmsend "ISSUE" CMDSTRING    */
  64. /*                          receive      cmrecv and display          */
  65. /*                                                                   */
  66. /* COPYRIGHT:               Kirk Sticken                             */
  67. /*                          November 29, 1994                        */
  68. /*                                                                   */
  69. /* AUTHOR:                  KIRK STICKEN                             */
  70. /*                                                                   */
  71. /*                                                                   */
  72. /* MODIFICATION RECORD:     NEW PROGRAM 09-15-93 KIRK STICKEN        */
  73. /*                          09/27/93 added retry on alloc rc=2       */
  74. /*                          06/09/94 added auto-define process $wks  */
  75. /*                          11/29/94 turned runpuppy into chat $wks  */
  76. /*                          12/14/94 changed command line parms $wks */
  77. /*                                                                   */
  78. /*                                                                   */
  79. /*                                                                   */
  80. /*                                                                   */
  81. /* *******************************************************************/
  82.  tracetype="normal"
  83.  select
  84.    when tracetype="normal" then trace normal
  85.    when tracetype="inter"  then trace inter
  86.    when tracetype="all"    then trace all
  87.    otherwise nop
  88.  end
  89.                                        /* conversation_type           */
  90.  cm_basic_conversation           = 0
  91.  cm_mapped_conversation          = 1
  92.                                        /* data_received               */
  93.  cm_no_data_received             = 0
  94.  cm_data_received                = 1
  95.  cm_complete_data_received       = 2
  96.  cm_incomplete_data_received     = 3
  97.                                        /* deallocate_type             */
  98.  cm_deallocate_sync_level        = 0
  99.  cm_deallocate_flush             = 1
  100.  cm_deallocate_confirm           = 2
  101.  cm_deallocate_abend             = 3
  102.                                        /* error_direction             */
  103.  cm_receive_error                = 0
  104.  cm_send_error                   = 1
  105.                                        /* fill                        */
  106.  cm_fill_ll                      = 0
  107.  cm_fill_buffer                  = 1
  108.                                        /* prepare_to_recieve_type     */
  109.  cm_prep_to_receive_sync_level   = 0
  110.  cm_prep_to_receive_flush        = 1
  111.  cm_prep_to_receive_confirm      = 2
  112.                                        /* receive_type                */
  113.  cm_receive_and_wait             = 0
  114.  cm_receive_immediate            = 1
  115.                                        /* request_to_send_received    */
  116.  cm_request_to_send_not_received = 0
  117.  cm_request_to_send_received     = 1
  118.                                        /* return_code                 */
  119.  cm_ok                           = 0
  120.  cm_allocate_failure_no_retry    = 1
  121.  cm_allocate_failure_retry       = 2
  122.  cm_conversion_type_mismatch     = 3
  123.  cm_security_not_valid           = 6
  124.  cm_sync_lvl_not_supported_pgm   = 8
  125.  cm_tpn_not_recognized           = 9
  126.  cm_tp_not_available_no_retry    = 10
  127.  cm_tp_not_available_retry       = 11
  128.  cm_deallocated_abend            = 17
  129.  cm_deallocated_normal           = 18
  130.  cm_parameter_error              = 19
  131.  cm_product_specific_error       = 20
  132.  cm_program_error_no_trunc       = 21
  133.  cm_program_error_purging        = 22
  134.  cm_program_error_trunc          = 23
  135.  cm_program_parameter_check      = 24
  136.  cm_program_state_check          = 25
  137.  cm_resource_failure_no_retry    = 26
  138.  cm_resource_failure_retry       = 27
  139.  cm_unsuccessful                 = 28
  140.  cm_deallocated_abend_svc        = 30
  141.  cm_deallocated_abend_timer      = 31
  142.  cm_svc_error_no_trunc           = 32
  143.  cm_svc_error_purging            = 33
  144.  cm_svc_error_trunc              = 34
  145.                                        /* return_control              */
  146.  cm_when_session_allocated       = 0
  147.  cm_immediate                    = 1
  148.                                        /* send_type                   */
  149.  cm_buffer_data                  = 0
  150.  cm_send_and_flush               = 1
  151.  cm_send_and_confirm             = 2
  152.  cm_send_and_prep_to_receive     = 3
  153.  cm_send_and_deallocate          = 4
  154.                                        /* status_received             */
  155.  cm_no_status_received           = 0
  156.  cm_send_received                = 1
  157.  cm_confirm_received             = 2
  158.  cm_confirm_send_received        = 3
  159.  cm_confirm_dealloc_received     = 4
  160.  
  161.                                        /* sync_level                  */
  162.  cm_none                         = 0
  163.  cm_confirm                      = 1
  164.  
  165.  TBC= "000102030405060708090A0B0C0D0E0F"X ||,  /* 00  */
  166.       "101112131415161718191A1B1C1D1E1F"X ||,  /* 10  */
  167.       "202122232425262728292A2B2C2D2E2F"X ||,  /* 20  */
  168.       "303132333435363738393A3B3C3D3E3F"X ||,  /* 30  */
  169.       "404142434445464748494A4B4C4D4E4F"X ||,  /* 40  */
  170.       "505152535455565758595A5B5C5D5E5F"X ||,  /* 50  */
  171.       "606162636465666768696A6B6C6D6E6F"X ||,  /* 60  */
  172.       "707172737475767778797A7B7C7D7E7F"X ||,  /* 70  */
  173.       "808182838485868788898A8B8C8D8E8F"X ||,  /* 80  */
  174.       "909192939495969798999A9B9C9D9E9F"X ||,  /* 90  */
  175.       "A0A1A2A3A4A5A6A7A8A9AAABACADAEAF"X ||,  /* A0  */
  176.       "B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF"X ||,  /* B0  */
  177.       "C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF"X ||,  /* C0  */
  178.       "D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF"X ||,  /* D0  */
  179.       "E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF"X ||,  /* E0  */
  180.       "F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF"X      /* F0  */
  181.  EBC= "00010203372D2E2F1605250B0C0D0E0F"X ||,  /* 00  */
  182.       "101112133C3D322618193F271C1D1E1F"X ||,  /* 10  */
  183.       "405A7F7B5B6C507D4D5D5C4E6B604B61"X ||,  /* 20  */
  184.       "F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F"X ||,  /* 30  */
  185.       "7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6"X ||,  /* 40  */
  186.       "D7D8D9E2E3E4E5E6E7E8E9BAE0BBB06D"X ||,  /* 50  */
  187.       "79818283848586878889919293949596"X ||,  /* 60  */
  188.       "979899A2A3A4A5A6A7A8A9C04FD0A107"X ||,  /* 70  */
  189.       "68DC5142434447485253545756586367"X ||,  /* 80  */
  190.       "719C9ECBCCCDDBDDDFECFC70B180BFFF"X ||,  /* 90  */
  191.       "4555CEDE49699A9BABAF5FB8B7AA8A8B"X ||,  /* A0  */
  192.       "2B2C092128656264B4383134334AB224"X ||,  /* B0  */
  193.       "22172906202A46661A35083936303A9F"X ||,  /* C0  */
  194.       "8CAC7273740A757677231514046A783B"X ||,  /* D0  */
  195.       "EE59EBEDCFEFA08EAEFEFBFD8DADBCBE"X ||,  /* E0  */
  196.       "CA8F1BB9B6B5E19D90BDB3DAFAEA3E41"X      /* F0  */
  197.  ASC= "00010203DC09C37FCAB2D50B0C0D0E0F"X ||,  /* 00  */
  198.       "10111213DBDA08C11819C8F21C1D1E1F"X ||,  /* 10  */
  199.       "C4B3C0D9BF0A171BB4C2C5B0B1050607"X ||,  /* 20  */
  200.       "CDBA16BCBBC9CC04B9CBCEDF1415FE1A"X ||,  /* 30  */
  201.       "20FF838485A0C68687A4BD2E3C282B7C"X ||,  /* 40  */
  202.       "268288898AA18C8B8DE121242A293BAA"X ||,  /* 50  */
  203.       "2D2FB68EB7B5C78F80A5DD2C255F3E3F"X ||,  /* 60  */
  204.       "9B90D2D3D4D6D7D8DE603A2340273D22"X ||,  /* 70  */
  205.       "9D616263646566676869AEAFD0ECE7F1"X ||,  /* 80  */
  206.       "F86A6B6C6D6E6F707172A6A791F792CF"X ||,  /* 90  */
  207.       "E67E737475767778797AADA8D1EDE8A9"X ||,  /* A0  */
  208.       "5E9CBEFAB8F5F4ACABF35B5DEEF9EF9E"X ||,  /* B0  */
  209.       "7B414243444546474849F0939495A2E4"X ||,  /* C0  */
  210.       "7D4A4B4C4D4E4F505152FB968197A398"X ||,  /* D0  */
  211.       "5CF6535455565758595AFDE299E3E0E5"X ||,  /* E0  */
  212.       "30313233343536373839FCEA9AEBE99F"X      /* F0  */
  213.  
  214.  state="reset"
  215.  cm_rc.0 ="cm_ok                         "
  216.  cm_rc.1 ="cm_allocate_failure_no_retry  "
  217.  cm_rc.2 ="cm_allocate_failure_retry     "
  218.  cm_rc.3 ="cm_conversion_type_mismatch   "
  219.  cm_rc.6 ="cm_security_not_valid         "
  220.  cm_rc.8 ="cm_sync_lvl_not_supported_pgm "
  221.  cm_rc.9 ="cm_tpn_not_recognized         "
  222.  cm_rc.10="cm_tp_not_available_no_retry  "
  223.  cm_rc.11="cm_tp_not_available_retry     "
  224.  cm_rc.17="cm_deallocated_abend          "
  225.  cm_rc.18="cm_deallocated_normal         "
  226.  cm_rc.19="cm_parameter_error            "
  227.  cm_rc.20="cm_product_specific_error     "
  228.  cm_rc.21="cm_program_error_no_trunc     "
  229.  cm_rc.22="cm_program_error_purging      "
  230.  cm_rc.23="cm_program_error_trunc        "
  231.  cm_rc.24="cm_program_parameter_check    "
  232.  cm_rc.25="cm_program_state_check        "
  233.  cm_rc.26="cm_resource_failure_no_retry  "
  234.  cm_rc.27="cm_resource_failure_retry     "
  235.  cm_rc.28="cm_unsuccessful               "
  236.  cm_rc.30="cm_deallocated_abend_svc      "
  237.  cm_rc.31="cm_deallocated_abend_timer    "
  238.  cm_rc.32="cm_svc_error_no_trunc         "
  239.  cm_rc.33="cm_svc_error_purging          "
  240.  cm_rc.34="cm_svc_error_trunc            "
  241.  hadparms="N"
  242.  arg destname cmdline
  243.  tpn=""
  244.  if pos("/",destname)>0 then ,
  245.    do
  246.      i=pos("/",destname)
  247.      tpn=substr(destname,i+1)
  248.      destname=substr(destname,1,i-1)
  249.    end
  250.  if length(cmdline)=0 then cmdline="DIR"
  251.  else hadparms="Y"
  252.  if length(destname)=0 then ,
  253.    do
  254.      destname="RUNBLK"
  255.      hadparms="N"
  256.    end
  257.  wk=0
  258.  cmd.1=cmdline
  259.  cmd.2="/OVER"
  260.  cmd.3="/END"
  261.  cmdix=1
  262.  allocates=0
  263.  savedwt2=""
  264.  rck=0
  265.  wk=0
  266.  wrc=0
  267.  cminitk=0
  268.  sendfl="n"
  269.  rcvfl="n"
  270.  oldenv=address()
  271.  address cpicomm
  272.  qk=queued()
  273.  do i=1 to qk
  274.    pull
  275.  end
  276.  wt=time(r)
  277.  do until state="done"
  278.    select
  279.      when tracetype="normal" then nop
  280.      when tracetype="inter"  then push substr(state"..........",1,10) ,
  281.                                       date() time(r)
  282.      when tracetype="all"    then push substr(state"..........",1,10) ,
  283.                                       date() time(r)
  284.      otherwise nop
  285.    end
  286.    select
  287.      when state="send" then ,
  288.        do
  289.          if hadparms="Y" then ,
  290.            do
  291.              text=cmd.cmdix
  292.              cmdix=cmdix+1
  293.              if cmdix>3 then state="dealloc"
  294.            end
  295.          else ,
  296.            do
  297.              pull text
  298.            end
  299.          text=" "text
  300.          textl=length(text)
  301.          if text="/OVER" then state="receive"
  302.          else ,
  303.            if text="/END" then state="dealloc"
  304.            else ,
  305.              do
  306.                if oldenv="CMD" ,
  307.                | oldenv="PMREXX" then ,
  308.                  text=translate(text,EBC,TBC)
  309.               "cmsend convid text textl rts_rcvd return_code"
  310.                if return_code=cm_ok then ,
  311.                  if rts_rcvd = cm_req_to_send_received then
  312.                    state="receive"
  313.                  else nop
  314.                else state="error"
  315.              end
  316.        end
  317.      when state="receive" then ,
  318.        do
  319.          textl=500
  320.         "cmrcv convid text  textl       data_rcvd" ,
  321.                      "textl status_rcvd rts_rcvd" ,
  322.                      "return_code"
  323.          select
  324.            when   status_rcvd=cm_send_received ,
  325.                 & data_rcvd=cm_no_data_received ,
  326.                   then                 state="send"
  327.            when   status_rcvd=cm_send_received  ,
  328.                 & data_rcvd=cm_data_received ,
  329.                   then                 state="send"
  330.            when   status_rcvd=cm_send_received  ,
  331.                 & data_rcvd=cm_complete_data_received ,
  332.                   then                 state="send"
  333.            when   status_rcvd=cm_send_received  ,
  334.                 & data_rcvd=cm_incomplete_data_received ,
  335.                   then                 state="send-pending"
  336.            when   status_rcvd=cm_confirm_received ,
  337.                   then                 state="confirm"
  338.            when   status_rcvd=cm_confirm_send_received ,
  339.                   then                 state="confirm-send"
  340.            when   status_rcvd=cm_confirm_dealloc_received ,
  341.                   then                 state="confirm-dealloc"
  342.            otherwise nop
  343.          end
  344.          select
  345.            when data_rcvd=cm_no_data_received then nop
  346.            when data_rcvd=cm_data_received      ,
  347.               | data_rcvd=cm_complete_data_received   then ,
  348.              do
  349.                rck=rck+1
  350.                if length(savedwt2)>0 then ,
  351.                  txrcv.rck=savedwt2||substr(text,1,textl)
  352.                else ,
  353.                  txrcv.rck=substr(text,1,textl)
  354.                savedwt2=""
  355.                if oldenv="CMD" ,
  356.                 | oldenv="PMREXX" then ,
  357.                  txrcv.rck=translate(txrcv.rck,ASC,TBC)
  358.                select
  359.                  when tracetype="normal" then ,
  360.                    do
  361.                      wt1=txrcv.rck
  362.                      do until wt1=" "
  363.                        parse value wt1 with wt2";"wt1
  364.                        wt2=strip(wt2,t)
  365.                        say wt2
  366.                      end
  367.                    end
  368.                  when tracetype="all"    then ,
  369.                       say "flm002i rcvd:("txrcv.rck")"
  370.                  when tracetype="inter"  then ,
  371.                       say "flm003i rcvd:("txrcv.rck")"
  372.                  otherwise say txrcv.rck
  373.                end
  374.  
  375.  
  376.                if word(txrcv.rck,1)="ISSUE" then ,
  377.                  do
  378.                    wt1=delword(txrcv.rck,1,1)
  379.                    wt1=translate(wt1,"'","""")
  380.                    address value oldenv
  381.                    if oldenv="TSO" then ,
  382.                      do
  383.                       "execio 0 diskw sysprint (finis)"
  384.                       "execio 0 diskw vtocout (finis)"
  385.                        zz=outtrap("rslt.","*")
  386.                      end
  387.                    else ,
  388.                      if oldenv="CMD" ,
  389.                       | oldenv="PMREXX" then ,
  390.                        wt1=wt1 "> c:\tmp\chat.rof"
  391.                      else  nop
  392.                    wt1
  393.                    wrc=rc
  394.                    if oldenv="TSO" then ,
  395.                      do
  396.                        zz=outtrap("OFF")
  397.                        do kk=1 to rslt.0
  398.                          rck=rck+1
  399.                          txrcv.rck=rslt.kk
  400.                        end
  401.                       "execio * diskr sysprint" ,
  402.                           "(stem sysprint. finis)"
  403.                        do kk=1 to sysprint.0
  404.                          rck=rck+1
  405.                          txrcv.rck=strip(sysprint.kk)
  406.                        end
  407.                       "execio * diskr vtocout" ,
  408.                           "(stem vtocout. finis)"
  409.                        do kk=1 to vtocout.0
  410.                          rck=rck+1
  411.                          txrcv.rck=strip(vtocout.kk)
  412.                        end
  413.                        rck=rck+1
  414.                        txrcv.rck="rc="wrc
  415.                        address cpicomm
  416.                      end
  417.                    else ,
  418.                      if oldenv="CMD" ,
  419.                       | oldenv="PMREXX" then ,
  420.                        do
  421.                          of="c:\tmp\chat.rof"
  422.                          if exist(of) then ,
  423.                            do
  424.                              DO WHILE LINES(of) <> 0
  425.                                oBuffer = LineIn(of)
  426.                                rck=rck+1
  427.                                txrcv.rck=oBuffer
  428.                              END
  429.                            end
  430.                          address cpicomm
  431.                          rck=rck+1
  432.                          txrcv.rck="rc="wrc
  433.                        end
  434.                      else nop
  435.                  end
  436.              end
  437.            when data_rcvd=cm_incomplete_data_received then ,
  438.              do
  439.                rck=rck+1
  440.                if length(savedwt2)>0 then ,
  441.                  txrcv.rck=savedwt2||substr(text,1,textl)
  442.                else ,
  443.                  txrcv.rck=substr(text,1,textl)
  444.                if oldenv="CMD" ,
  445.                 | oldenv="PMREXX" then ,
  446.                  txrcv.rck=translate(txrcv.rck,ASC,TBC)
  447.                select
  448.                  when tracetype="normal" then ,
  449.                    do
  450.                      wt1=txrcv.rck
  451.                      do until wt1=" "
  452.                        parse value wt1 with wt2";"wt1
  453.                        wt2=wt2
  454.                        if length(wt1) > 0 then ,
  455.                          do
  456.                            wt2=strip(wt2,t)
  457.                            say wt2
  458.                          end
  459.                        else ,
  460.                          do
  461.                            if oldenv="CMD" ,
  462.                               | oldenv="PMREXX" then ,
  463.                            wt2=translate(wt2,EBC,TBC)
  464.                            savedwt2=wt2
  465.                          end
  466.                      end
  467.                    end
  468.                  when tracetype="all"    then ,
  469.                       say "flm002i rcvd:("txrcv.rck")"
  470.                  when tracetype="inter"  then ,
  471.                       say "flm003i rcvd:("txrcv.rck")"
  472.                  otherwise say txrcv.rck
  473.                end
  474.  
  475.  
  476.                if word(txrcv.rck,1)="ISSUE" then ,
  477.                  do
  478.                    wt1=delword(txrcv.rck,1,1)
  479.                    wt1=translate(wt1,"'","""")
  480.                    address value oldenv
  481.                    if oldenv="TSO" then ,
  482.                      do
  483.                       "execio 0 diskw sysprint (finis)"
  484.                       "execio 0 diskw vtocout (finis)"
  485.                        zz=outtrap("rslt.","*")
  486.                      end
  487.                    else ,
  488.                      if oldenv="CMD" ,
  489.                       | oldenv="PMREXX" then ,
  490.                        wt1=wt1 "> c:\tmp\chat.rof"
  491.                      else  nop
  492.                    wt1
  493.                    wrc=rc
  494.                    if oldenv="TSO" then ,
  495.                      do
  496.                        zz=outtrap("OFF")
  497.                        do kk=1 to rslt.0
  498.                          rck=rck+1
  499.                          txrcv.rck=rslt.kk
  500.                        end
  501.                       "execio * diskr sysprint" ,
  502.                           "(stem sysprint. finis)"
  503.                        do kk=1 to sysprint.0
  504.                          rck=rck+1
  505.                          txrcv.rck=strip(sysprint.kk)
  506.                        end
  507.                       "execio * diskr vtocout" ,
  508.                           "(stem vtocout. finis)"
  509.                        do kk=1 to vtocout.0
  510.                          rck=rck+1
  511.                          txrcv.rck=strip(vtocout.kk)
  512.                        end
  513.                        rck=rck+1
  514.                        txrcv.rck="rc="wrc
  515.                        address cpicomm
  516.                      end
  517.                    else ,
  518.                      if oldenv="CMD" ,
  519.                       | oldenv="PMREXX" then ,
  520.                        do
  521.                          of="c:\tmp\chat.rof"
  522.                          if exist(of) then ,
  523.                            do
  524.                              DO WHILE LINES(of) <> 0
  525.                                oBuffer = LineIn(of)
  526.                                rck=rck+1
  527.                                txrcv.rck=oBuffer
  528.                              END
  529.                            end
  530.                          address cpicomm
  531.                          rck=rck+1
  532.                          txrcv.rck="rc="wrc
  533.                        end
  534.                      else nop
  535.                  end
  536.              end
  537.            otherwise nop
  538.          end
  539.          if return_code=cm_ok then nop
  540.          else  state="error"
  541.        end
  542.      when state="dealloc" then ,
  543.        do
  544.         "cmdeal convid return_code"
  545.          if return_code=cm_ok then state="done"
  546.          else state="error"
  547.        end
  548.      when state="confirm" then ,
  549.        do
  550.         "cmcfmd convid return_code"
  551.          if return_code=cm_ok then state="receive"
  552.          else state="error"
  553.        end
  554.      when state="confirm-send" then ,
  555.        do
  556.         "cmcfmd convid return_code"
  557.          if return_code=cm_ok then state="send"
  558.          else state="error"
  559.        end
  560.      when state="confirm-dealloc" then ,
  561.        do
  562.         "cmcfmd convid return_code"
  563.          if return_code=cm_ok then state="done"
  564.          else state="error"
  565.        end
  566.      when state="send-pending" then ,
  567.        do
  568.          textl=500
  569.         "cmrcv convid text  textl       data_rcvd" ,
  570.                      "textl status_rcvd rts_rcvd" ,
  571.                      "return_code"
  572.          select
  573.            when data_rcvd=cm_no_data_received then ,
  574.               state="send"
  575.            when data_rcvd=cm_data_received      ,
  576.               | data_rcvd=cm_complete_data_received      ,
  577.               | data_rcvd=cm_incomplete_data_received then ,
  578.              do
  579.                rck=rck+1
  580.                txrcv.rck=substr(text,1,textl)
  581.                if oldenv="CMD" ,
  582.                 | oldenv="PMREXX" then ,
  583.                  txrcv.rck=translate(txrcv.rck,ASC,TBC)
  584.                select
  585.                  when tracetype="normal" then say txrcv.rck
  586.                  when tracetype="all"    then ,
  587.                       say "flm005i rcvd:("txrcv.rck")"
  588.                  when tracetype="inter"  then ,
  589.                       say "flm006i rcvd:("txrcv.rck")"
  590.                  otherwise say txrcv.rck
  591.                end
  592.                if word(txrcv.rck,1)="ISSUE" then ,
  593.                  do
  594.                    wt1=delword(txrcv.rck,1,1)
  595.                    wt1=translate(wt1,"'","""")
  596.                    address value oldenv
  597.                    if oldenv="TSO" then ,
  598.                      do
  599.                       "execio 0 diskw sysprint (finis)"
  600.                       "execio 0 diskw vtocout (finis)"
  601.                        zz=outtrap("rslt.","*")
  602.                      end
  603.                    else ,
  604.                      if oldenv="CMD" ,
  605.                      | oldenv="PMREXX" then ,
  606.                        wt1=wt1 "> c:\tmp\chat.rof"
  607.                      else  nop
  608.                    wt1
  609.                    wrc=rc
  610.                    if oldenv="TSO" then ,
  611.                      do
  612.                        zz=outtrap("OFF")
  613.                        do kk=1 to rslt.0
  614.                          rck=rck+1
  615.                          txrcv.rck=rslt.kk
  616.                        end
  617.                       "execio * diskr sysprint" ,
  618.                           "(stem sysprint. finis)"
  619.                        do kk=1 to sysprint.0
  620.                          rck=rck+1
  621.                          txrcv.rck=strip(sysprint.kk)
  622.                        end
  623.                       "execio * diskr vtocout" ,
  624.                           "(stem vtocout. finis)"
  625.                        do kk=1 to vtocout.0
  626.                          rck=rck+1
  627.                          txrcv.rck=strip(vtocout.kk)
  628.                        end
  629.                        rck=rck+1
  630.                        txrcv.rck="rc="wrc
  631.                        address cpicomm
  632.                      end
  633.                    else ,
  634.                      if oldenv="CMD" ,
  635.                      | oldenv="PMREXX" then ,
  636.                        do
  637.                          of="c:\tmp\chat.rof"
  638.                          if exist(of) then ,
  639.                            do
  640.                              DO WHILE LINES(of) <> 0
  641.                                oBuffer = LineIn(of)
  642.                                rck=rck+1
  643.                                txrcv.rck=oBuffer
  644.                              END
  645.                            end
  646.                          address cpicomm
  647.                          rck=rck+1
  648.                          txrcv.rck="rc="wrc
  649.                        end
  650.                      else nop
  651.                  end
  652.              end
  653.            otherwise nop
  654.          end
  655.          if return_code=cm_ok then nop
  656.          else state="error"
  657.        end
  658.      when state="error" then ,
  659.        do
  660.          if return_code=cm_deallocated_normal then nop
  661.          else ,
  662.            do
  663.              say "error rc="return_code cm_rc.return_code
  664.              say "state footprints"
  665.            end
  666.          state="done"
  667.        end
  668.      when state="reset" then ,
  669.        do
  670.          cminitk=cminitk+1
  671.          if oldenv="TSO" then ,
  672.            do
  673.             "cmaccp convid return_code"
  674.              if return_code=cm_ok then state="receive"
  675.              else ,
  676.                do
  677.                  sym_dest_name=destname
  678.                 "cminit convid sym_dest_name return_code"
  679.                  select
  680.                    when tracetype="normal" then nop
  681.                    when tracetype="all"    then ,
  682.                         say "init rc" ,
  683.                             return_code ,
  684.                             "for" sym_dest_name
  685.                    when tracetype="inter"  then ,
  686.                         say "init rc" ,
  687.                             return_code ,
  688.                             "for" sym_dest_name
  689.                    otherwise ,
  690.                         say "init rc" ,
  691.                             return_code ,
  692.                             "for" sym_dest_name
  693.                  end
  694.                  if return_code = cm_ok then ,
  695.                    do
  696.                      state="initialize"
  697.                      if length(tpn)>0 then ,
  698.                        do
  699.                          tpnl=length(tpn)
  700.                         "cmstpn convid tpn tpnl return_code"
  701.                          if return_code=cm_ok then nop
  702.                          else ,
  703.                            do
  704.                              say "flt000i tpn error="return_code
  705.                              state="error"
  706.                            end
  707.                        end
  708.                    end
  709.                  else state="error"
  710.                end
  711.            end
  712.          else ,
  713.            do
  714.    /*        if hadparms="N" then ,
  715.                do
  716.                 "cmaccp convid return_code"
  717.                  if return_code=cm_ok then state="receive"
  718.                  else state="error"
  719.                end
  720.              else ,
  721.      */        do
  722.                  sym_dest_name=destname
  723.                 "cminit convid sym_dest_name return_code"
  724.                  select
  725.                    when tracetype="normal" then nop
  726.                    when tracetype="all"    then ,
  727.                         say "init rc" ,
  728.                             return_code ,
  729.                             "for" sym_dest_name
  730.                    when tracetype="inter"  then ,
  731.                         say "init rc" ,
  732.                             return_code ,
  733.                             "for" sym_dest_name
  734.                    otherwise ,
  735.                         say "init rc" ,
  736.                             return_code ,
  737.                             "for" sym_dest_name
  738.                  end
  739.                  if return_code = cm_ok then ,
  740.                    do
  741.                      state="initialize"
  742.                      if length(tpn)>0 then ,
  743.                        do
  744.                          tpnl=length(tpn)
  745.                         "cmstpn convid tpn tpnl return_code"
  746.                          if return_code=cm_ok then nop
  747.                          else ,
  748.                            do
  749.                              say "flt000i tpn error="return_code
  750.                              state="error"
  751.                            end
  752.                        end
  753.                    end
  754.                  else ,
  755.                    if cminitk<2 then ,
  756.                      do
  757.                        modename="LU62MVS "
  758.                        key=substr(destname"        ",1,8)
  759.                        if length(tpn)>1 then nop
  760.                        else ,
  761.                        tpn="USA.xxxxxx.RED1.chat"
  762.                        s.sym_dest_name=key
  763.                        s.partner_LU_name="APPCMVS"
  764.                        s.TP_name = tpn
  765.                        s.mode_name=modename
  766.                        s.TP_name_type=0
  767.                        s.conversation_security_type=1
  768.                        s.security_user_id="@boole8"
  769.                        s.security_password="xxxxxxxx"
  770.                        SIDEL=124
  771.                       "XCMSSI key s sidel cmrc"
  772.                      end
  773.                    else ,
  774.                      state="error"
  775.                end
  776.            end
  777.        end
  778.      when state="initialize" then ,
  779.        do
  780.         "cmallc convid return_code"
  781.          if return_code = cm_ok then state="send"
  782.          else ,
  783.            if return_code=cm_allocate_failure_retry ,
  784.             | return_code=cm_program_parameter_check then ,
  785.              do
  786.                allocates=allocates+1
  787.                if allocates>1 then state="error"
  788.                else nop
  789.              end
  790.            else state="error"
  791.        end
  792.      otherwise state="error"
  793.    end
  794.  end
  795.  address oldenv
  796.  if substr(txrcv.rck,1,10)="RESULT:rc=" then ,
  797.    do
  798.      wt1=substr(txrcv.rck,11)
  799.      num1=word(wt1,1)
  800.      wrc=num1+00
  801.    end
  802.  k=0
  803.  qk=queued()
  804.  do i=1 to qk
  805.    pull wt1
  806.    parse value wt1 with state dd mmm yyyy int
  807.    if k=0 then ,
  808.      do
  809.        k=1
  810.        stab.1=state
  811.        scnt.1=1
  812.        sint.1=int
  813.      end
  814.    else ,
  815.      do
  816.        found="N"
  817.        do j=1 to k
  818.          if stab.j=state then ,
  819.            do
  820.              found="Y"
  821.              scnt.j=1 + scnt.j
  822.              sint.j=int +sint.j
  823.            end
  824.        end
  825.        if found="N" then ,
  826.          do
  827.            k=k+1
  828.            stab.k=state
  829.            scnt.k=1
  830.            sint.k=int
  831.          end
  832.      end
  833.    say "..." format(1-i,4,0) wt1
  834.  end
  835.  do i=1 to k
  836.    avg=sint.i/scnt.i
  837.    say stab.i "average" avg
  838.  end
  839.  exit wrc
  840. EXIST:
  841.     parse arg fname
  842.     IF LENGTH(STREAM(fname,'C','QUERY EXISTS')) > 0
  843.         THEN RC = 1
  844.         ELSE RC = 0
  845. RETURN RC
  846.