home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l360 / 3.ddi / DDE.@EM / DDE2.CBL < prev    next >
Encoding:
Text File  |  1991-04-08  |  28.8 KB  |  735 lines

  1.       $set ans85 noosvs mf
  2.  
  3.       *******************************************************************
  4.       *                                                                 *
  5.       *     DDE2 example using COBOL                                    *
  6.       *                                                                 *
  7.       *             by Raymond Obin                                     *
  8.       *             (C) 1990 Micro Focus Ltd.                           *
  9.       *                                                                 *
  10.       *             Written 12 June 1990                                *
  11.       *                                                                 *
  12.       *******************************************************************
  13.       *                                                                 *
  14.       *     This example program should be used in conjunction with     *
  15.       *     the DDE example program.                                    *
  16.       *     This program is an alternative to using EXCEL.              *
  17.       *                                                                 *
  18.       *     For details, see DDE.CBL.                                   *
  19.       *                                                                 *
  20.       *******************************************************************
  21.     special-names.
  22.         call-convention 3 is OS2API.
  23.  
  24.         working-storage section.
  25.  
  26.         copy "DDE2.CPY".
  27.  
  28.         78  WM-INITDLG              value   h"3b".
  29.         78  WM-CONTROL              value   h"30".
  30.         78  WM-COMMAND              value   h"20".
  31.         78  LM-INSERTITEM           value   h"0161".
  32.         78  LM-SELECTITEM           value   h"0164".
  33.         78  LM-QUERYSELECTION       value   h"0165".
  34.         78  LM-QUERYITEMTEXT        value   h"0168".
  35.         78  LM-SEARCHSTRING         value   h"016b".
  36.         78  LN-SELECT               value   1.
  37.         78  LIT-SORTASCENDING       value   -2.
  38.         78  LIT-FIRST               value   -1.
  39.         78  LIT-FIRST-HIGH          value   h"ffff0000".
  40.  
  41.         78  HWND-DESKTOP            value   1.
  42.  
  43.         78  DDEFMT-TEXT             value   1.
  44.  
  45.         78  DDE-FACK                value   1.
  46.  
  47.         78  XTYP-INIT               VALUE H"0120".
  48.         78  XTYP-ADVDATA            VALUE H"0240".
  49.         78  XTYP-EXEC               VALUE H"0340".
  50.         78  XTYP-POKE               VALUE H"0440".
  51.         78  XTYP-ADVSTART           VALUE H"0520".
  52.         78  XTYP-TERM               VALUE H"0610".
  53.         78  XTYP-ADVSTOP            VALUE H"0710".
  54.         78  XTYP-REGISTER           VALUE H"0810".
  55.         78  XTYP-UNREGISTER         VALUE H"0910".
  56.         78  XTYP-ADVREQ             VALUE H"0A80".
  57.         78  XTYP-MONITOR            VALUE H"0B10".
  58.         78  XTYP-ACK                VALUE H"0C10".
  59.         78  XTYP-WILDINIT           VALUE H"0D80".
  60.         78  XTYP-REQUEST            VALUE H"0E80".
  61.         78  XTYP-XFERCOMPLETE       VALUE H"0F10".
  62.  
  63.     01  work-data.
  64.             03  hab                 pointer.
  65.             03  hmq                 pointer.
  66.             03  hwndDlg             pic 9(9) comp-5.
  67.             03  hwndField           pic 9(9) comp-5.
  68.             03  hwndStatus          pic 9(9) comp-5.
  69.             03  hwndListbox         pic 9(9) comp-5.
  70.  
  71.             03  WndProc     procedure-pointer.
  72.  
  73.             03  errorCode           pic 9(4) comp-5.
  74.  
  75.             03  AdviseControl.
  76.                 05  AdivseFlag  pic x   value 'N'.
  77.                     88  AdviseOK        value 'Y'.
  78.                     88  AdviseOff       value 'N'.
  79.                 05  hszAdviseTopic  pointer.
  80.                 05  hszAdviseItem   pointer.
  81.  
  82.         78  L-TESTDATA          value 'TestData'.
  83.         78  L-TARGETTOPIC       value 'Sheet1'.
  84.         78  L-TARGETCELL        value 'R1C1'.
  85.  
  86.         01  DDEDataArea.
  87.             03  DDEName         pic x(20).
  88.             03  DDETopic        pic x(9)  value L-TARGETTOPIC & x"00".
  89.             03  hszDDETopic     pointer.
  90.             03  DDEL-System     pic x(7)  value 'System' & x"00".
  91.             03  hszSystem       pointer.
  92.             03  DDEL-Topics     pic x(7)  value 'Topics' & x"00".
  93.             03  hszTopics       pointer.
  94.             03  DDEL-SysItems   pic x(9)  value 'SysItems' & x"00".
  95.             03  hszSysItems     pointer.
  96.             03  DDEL-Status     pic x(7)  value 'Status' & x"00".
  97.             03  hszStatus       pointer.
  98.             03  DDEAdviseItem   pic x(8)  value 'Number0' & x"00".
  99.             03  redefines DDEAdviseItem.
  100.                 05              pic x(6).
  101.                 05  DDEItem9    pic 9.
  102.                 05              pic x.
  103.             03  TargetApp       pic x(20).
  104.             03  hszTargetApp    pointer.
  105.             03  TargetTopic     pic x(20) value L-TESTDATA & x"00".
  106.             03  hszTargetTopic  pointer.
  107.             03  SelectedColour  pic x(21) value 'Red' & x"00".
  108.             03  ItemXfer        pic x(20).
  109.             03  DataXfer        pic x(50).
  110.             03  XferProc        procedure-pointer.
  111.             03  xtyp            pic 9(4) comp-5.
  112.             03  DDEMsg          pic x(30).
  113.             03  DDEData         pic x(256).
  114.             03  hszItemName     pointer.
  115.             03  pidXfer         pic 9(9) comp-5.
  116.             03  hConversation   pointer.
  117.             03  hDmgConvData    pointer.
  118.  
  119.     local-storage section.
  120.     01  mresult    pic x(4) comp-5.
  121.         01  DDELocalData.
  122.             03  DDEResult   pic x(4) comp-5.
  123.             03  DDEReply    pic x(40).
  124.             03  DDEReply9   pic 9(3).
  125.             03              pic x comp-5 value 0.
  126.             03  ConversationData.
  127.         78  lszTopicString          value 40.
  128.         78  lszItemString           value 40.
  129.                 05  hszTopicString      pic x(lszTopicString).
  130.                 05  hszItemString       pic x(lszItemString).
  131.  
  132.         01  i                   pic 9(9) comp-5.
  133.         01  si                  pic 9(4) comp-5.
  134.         01  hwndTemp            pic 9(9) comp-5.
  135.  
  136.     linkage section.
  137.         01  hwnd        pic x(4) comp-5.
  138.         01  msg         pic x(2) comp-5.
  139.         01  mp1         pic x(4) comp-5.
  140.     01  redefines mp1.
  141.             03  mp1w1   pic x(2) comp-5.
  142.             03  mp1w2   pic x(2) comp-5.
  143.         01  mp2         pic x(4) comp-5.
  144.     01  redefines mp2.
  145.             03  mp2w1   pic x(2) comp-5.
  146.             03  mp2w2   pic x(2) comp-5.
  147.  
  148.         01  hConv           pointer.
  149.         01  hszTopic        pointer.
  150.         01  hszItem         pointer.
  151.         01  usFmt           pic 9(4) comp-5.
  152.         01  usType          pic 9(4) comp-5.
  153.         01  hDmgData        pointer.
  154.  
  155.     procedure division OS2API.
  156.         main section.
  157.  
  158.             accept DDEData from command-line
  159.             unstring DDEData delimited by spaces
  160.                     into DDEName TargetApp
  161.  
  162.             if DDEName = spaces
  163.                 move 'Excel' to DDEName
  164.             end-if
  165.             if TargetApp = spaces
  166.                 move 'COBOLDDE' to TargetApp
  167.             end-if
  168.             perform varying i from length of DDEName by -1
  169.                         until DDEName(i:1) not = spaces
  170.                 move x"00" to DDEName(i:1)
  171.             end-perform
  172.             perform varying i from length of TargetApp by -1
  173.                         until TargetApp(i:1) not = spaces
  174.                 move x"00" to TargetApp(i:1)
  175.             end-perform
  176.  
  177.         call OS2API '__WinInitialize'
  178.             using    by value 0 size 2
  179.             returning hab
  180.         call OS2API '__WinCreateMsgQueue'
  181.             using by value hab
  182.                   by value 0 size 2
  183.                         returning hmq
  184.  
  185.             move 0 to hwndListbox
  186.             set hConversation to NULL
  187.  
  188.             set XferProc to entry 'DDEXFER'
  189.  
  190.             call OS2API '__DDEMgrRegister' using
  191.                         by reference DdeName
  192.                         by value     XferProc
  193.                         by value     1000        size 4
  194.                         by value     0           size 4
  195.                         by value     0           size 4
  196.                     returning errorCode
  197.  
  198.             if errorCode = 0
  199.                 move 'DDE Register successful' & x"00" to DDEMsg
  200.             else
  201.                 move 'DDE Register fail' & x"00" to DDEMsg
  202.             end-if
  203.  
  204.             call OS2API '__DDEMgrGetHsz'
  205.                         using by reference TargetApp
  206.                         returning hszTargetApp
  207.             call OS2API '__DDEMgrGetHsz'
  208.                         using by reference TargetTopic
  209.                         returning hszTargetTopic
  210.             call OS2API '__DDEMgrGetHsz'
  211.                         using by reference DDEL-System
  212.                         returning hszSystem
  213.             call OS2API '__DDEMgrGetHsz'
  214.                         using by reference DDEL-Topics
  215.                         returning hszTopics
  216.             call OS2API '__DDEMgrGetHsz'
  217.                         using by reference DDEL-SysItems
  218.                         returning hszSysItems
  219.             call OS2API '__DDEMgrGetHsz'
  220.                         using by reference DDEL-Status
  221.                         returning hszStatus
  222.             call OS2API '__DDEMgrGetHsz'
  223.                         using by reference DDETopic
  224.                         returning hszDDETopic
  225.  
  226.             set WndProc to ENTRY 'DlgProc'
  227.  
  228.             call OS2API '__WinDlgBox' using
  229.                         by value HWND-DESKTOP size 4
  230.                         by value HWND-DESKTOP size 4
  231.                         by value WndProc
  232.                         by value 0 size 2
  233.                         by value IDD-DDEEG size 2
  234.                         by value 0 size 4
  235.  
  236.             call OS2API '__DDEMgrFreeHsz' using
  237.                         by value hszDDETopic
  238.             call OS2API '__DDEMgrFreeHsz' using
  239.                         by value hszStatus
  240.             call OS2API '__DDEMgrFreeHsz' using
  241.                         by value hszSysItems
  242.             call OS2API '__DDEMgrFreeHsz' using
  243.                         by value hszTopics
  244.             call OS2API '__DDEMgrFreeHsz' using
  245.                         by value hszSystem
  246.             call OS2API '__DDEMgrFreeHsz' using
  247.                         by value hszTargetTopic
  248.             call OS2API '__DDEMgrFreeHsz' using
  249.                         by value hszTargetApp
  250.  
  251.             call OS2API '__DDEMgrUnregister'
  252.  
  253.         call OS2API '__WinDestroyMsgQueue' using by value hmq
  254.         call OS2API '__WinTerminate'       using by value hab
  255.  
  256.         stop run.
  257.  
  258.  
  259.         MyDlgProc section.
  260.         entry 'DlgProc' using by value hwnd
  261.                   by value msg
  262.                   by value mp1
  263.                   by value mp2.
  264.  
  265.         move 0 to mresult
  266.             evaluate msg
  267.  
  268.               when    WM-INITDLG
  269.                 move hwnd to hwndDlg
  270.                 call OS2API '__WinWindowFromID' using
  271.                             by value hwnd
  272.                             by value IDL-COLOUR size 2
  273.                             returning hwndListbox
  274.                 call OS2API '__WinSendMsg' using
  275.                             by value hwndListbox
  276.                             by value LM-INSERTITEM      size 2
  277.                             by value LIT-SORTASCENDING  size 4
  278.                             by reference 'White' & x"00"
  279.                 call OS2API '__WinSendMsg' using
  280.                             by value hwndListbox
  281.                             by value LM-INSERTITEM      size 2
  282.                             by value LIT-SORTASCENDING  size 4
  283.                             by reference 'Blue' & x"00"
  284.                 call OS2API '__WinSendMsg' using
  285.                             by value hwndListbox
  286.                             by value LM-INSERTITEM      size 2
  287.                             by value LIT-SORTASCENDING  size 4
  288.                             by reference 'Red' & x"00"
  289.                 call OS2API '__WinSendMsg' using
  290.                             by value hwndListbox
  291.                             by value LM-INSERTITEM      size 2
  292.                             by value LIT-SORTASCENDING  size 4
  293.                             by reference 'Magenta' & x"00"
  294.                 call OS2API '__WinSendMsg' using
  295.                             by value hwndListbox
  296.                             by value LM-INSERTITEM      size 2
  297.                             by value LIT-SORTASCENDING  size 4
  298.                             by reference 'Green' & x"00"
  299.                 call OS2API '__WinSendMsg' using
  300.                             by value hwndListbox
  301.                             by value LM-INSERTITEM      size 2
  302.                             by value LIT-SORTASCENDING  size 4
  303.                             by reference 'Cyan' & x"00"
  304.                 call OS2API '__WinSendMsg' using
  305.                             by value hwndListbox
  306.                             by value LM-INSERTITEM      size 2
  307.                             by value LIT-SORTASCENDING  size 4
  308.                             by reference 'Yellow' & x"00"
  309.  
  310.                 call OS2API '__WinWindowFromID' using
  311.                             by value hwnd
  312.                             by value IDT-VALUE1 size 2
  313.                             returning hwndField
  314.  
  315.                 call OS2API '__WinSetWindowText' using
  316.                             by value hwndField
  317.                             by reference x'00'
  318.  
  319.                 call OS2API '__WinWindowFromID' using
  320.                             by value hwnd
  321.                             by value IDT-VALUE2 size 2
  322.                             returning hwndField
  323.  
  324.                 call OS2API '__WinSetWindowText' using
  325.                             by value hwndField
  326.                             by reference x'00'
  327.  
  328.                 call OS2API '__WinWindowFromID' using
  329.                             by value hwnd
  330.                             by value IDT-VALUE3 size 2
  331.                             returning hwndField
  332.  
  333.                 call OS2API '__WinSetWindowText' using
  334.                             by value hwndField
  335.                             by reference x'00'
  336.  
  337.                 call OS2API '__WinWindowFromID' using
  338.                             by value hwnd
  339.                             by value IDT-STATUS size 2
  340.                             returning hwndStatus
  341.  
  342.                 perform Refresh
  343.  
  344.                 set hConversation to NULL
  345.  
  346.               when WM-COMMAND
  347.                 evaluate mp1w1
  348.                   when IDB-INITIATE
  349.  
  350.                     if hConversation not = null
  351.                         exit program returning mresult
  352.                     end-if
  353.  
  354.                     perform InitConv
  355.  
  356.                     if hConversation not = null
  357.  
  358.                         move XTYP-ADVSTART to xtyp
  359.                         perform AdviseLoop
  360.  
  361.                         move XTYP-REQUEST to xtyp
  362.                         perform varying DDEItem9 from 1 by 1
  363.                                 until DDEItem9 > 3
  364.                             move DDEItem9 to si
  365.                             move DDEAdviseItem to ItemXfer
  366.  
  367.                             perform DDEXfer
  368.  
  369.                             move DDEData to DDEReply
  370.                             perform UpdateNumbers
  371.  
  372.                         end-perform
  373.  
  374.                         move 'DDE Hot-links Active' & x"00" to DDEMsg
  375.                     else
  376.                         move 'DDE Initiate Failed' & x"00" to DDEMsg
  377.                     end-if
  378.                     perform Refresh
  379.  
  380.                   when IDB-TERMINATE
  381.                   when IDB-EXIT
  382.  
  383.                     if hConversation not = null
  384.  
  385.                         move XTYP-ADVSTOP to xtyp
  386.                         perform AdviseLoop
  387.  
  388.                         perform TermConv
  389.  
  390.                     end-if
  391.  
  392.                     if mp1w1 = IDB-EXIT
  393.                         call OS2API '__WinDismissDlg' using
  394.                                     by value hwnd
  395.                                     by value 1 size 2
  396.       *                     This call never returns.
  397.                     end-if
  398.  
  399.                     move 'DDE Terminated' & x"00" to DDEMsg
  400.                     perform Refresh
  401.  
  402.                   when other
  403.                 end-evaluate
  404.  
  405.               when WM-CONTROL
  406.                 evaluate mp1w1
  407.                   when IDL-COLOUR
  408.                     if mp1w2 = LN-SELECT
  409.                         call OS2API '__WinSendDlgItemMsg' using
  410.                                     by value hwnd
  411.                                     by value IDL-COLOUR size 2
  412.                                     by value LM-QUERYSELECTION size 2
  413.                                     by value LIT-FIRST size 4
  414.                                     by value 0  size 4
  415.                                     returning mp2
  416.                         move 20 to mp2w2
  417.                         call OS2API '__WinSendDlgItemMsg' using
  418.                                     by value hwnd
  419.                                     by value IDL-COLOUR size 2
  420.                                     by value LM-QUERYITEMTEXT size 2
  421.                                     by value mp2
  422.                                     by reference SelectedColour
  423.                         if AdviseOK
  424.                             call OS2API '__DDEMgrPostAdvise' using
  425.                                     by value hszAdviseTopic
  426.                                     by value hszAdviseItem
  427.                         end-if
  428.                     end-if
  429.                 end-evaluate
  430.  
  431.               when other
  432.                 call OS2API '__WinDefDlgProc'
  433.                             using by value hwnd
  434.                                   by value msg
  435.                                   by value mp1
  436.                                   by value mp2
  437.                             returning mresult
  438.  
  439.         end-evaluate
  440.  
  441.             exit program returning mresult.
  442.  
  443.         AdviseLoop Section.
  444.             move x"00" to DataXfer
  445.  
  446.             perform varying DDEItem9 from 1 by 1
  447.                     until DDEItem9 > 3
  448.                 move DDEAdviseItem to ItemXfer
  449.                 perform DDEXfer
  450.             end-perform.
  451.  
  452.         DDEXfer section.
  453.             if hConversation not = NULL
  454.                 move 1 to i
  455.                 inspect DataXfer tallying i for characters
  456.                         before initial x"00"
  457.  
  458.                 call OS2API '__DDEMgrGetHsz'
  459.                             using by reference ItemXfer
  460.                             returning hszItemName
  461.                 call OS2API '__DDEMgrClientXfer' using
  462.                             by reference DataXfer
  463.                             by value i
  464.                             by value hConversation
  465.                             by value hszItemName
  466.                             by value DDEFMT-TEXT size 2
  467.                             by value xtyp
  468.                             by value 5000 size 4
  469.                             by reference pidXfer
  470.                         returning hDmgConvData
  471.  
  472.                 call OS2API '__DDEMgrGetLastError'
  473.                         returning errorCode
  474.       *         call OS2API '__DDEMgrPostError'
  475.       *                      using by value errorCode
  476.  
  477.                 move spaces to DDEData
  478.  
  479.                 if xtyp = XTYP-REQUEST
  480.  
  481.                     call OS2API '__DDEMgrGetData' using
  482.                                 by value hDmgConvData
  483.                                 by reference DDEData
  484.                                 by value 255 size 4
  485.                                 by value 0 size 4
  486.  
  487.                     call OS2API '__DDEMgrGetLastError'
  488.                             returning errorCode
  489.       *             call OS2API '__DDEMgrPostError'
  490.       *                          using by value errorCode
  491.                     call OS2API '__DDEMgrFreeData' using
  492.                                 by value hDmgConvData
  493.  
  494.                 end-if
  495.  
  496.                 call OS2API '__DDEMgrFreeHsz'
  497.                             using by value hszItemName
  498.  
  499.                 if hDmgConvData not = NULL
  500.                     move "DDEMgrClientXfer OK" to DDEMsg
  501.                 else
  502.                     move "DDEMgrClientXfer Fail" to DDEMsg
  503.                 end-if
  504.             end-if.
  505.  
  506.         InitConv section.
  507.             if hConversation = NULL
  508.                 call OS2API '__DDEMgrConnect' using
  509.                              by value hszTargetApp
  510.                                       hszTargetTopic
  511.                                       0 size 4
  512.                             returning hConversation
  513.  
  514.                 if hConversation = NULL
  515.                     call OS2API '__DDEMgrGetLastError'
  516.                                  returning errorCode
  517.                     call OS2API '__DDEMgrPostError'
  518.                                  using by value errorCode
  519.                     move 'DDE connection failed' & x"00" to DDEMsg
  520.                 else
  521.                     move 'DDE connected' & x"00" to DDEMsg
  522.                 end-if
  523.             end-if.
  524.  
  525.         UpdateNumbers Section.
  526.             evaluate si
  527.               when 1
  528.                 move IDT-VALUE1 to si
  529.               when 2
  530.                 move IDT-VALUE2 to si
  531.               when 3
  532.                 move IDT-VALUE3 to si
  533.             end-evaluate
  534.             call OS2API '__WinWindowFromID' using
  535.                         by value hwndDlg
  536.                         by value si
  537.                         returning hwndTemp
  538.             call OS2API '__WinSetWindowText' using
  539.                         by value hwndTemp
  540.                         by reference DDEReply.
  541.  
  542.         TermConv section.
  543.             if hConversation not = NULL
  544.                 call OS2API '__DDEMgrDisconnect'
  545.                             using by value hConversation
  546.                             returning errorCode
  547.  
  548.                 set hConversation to NULL
  549.  
  550.                 call OS2API '__DDEMgrGetLastError'
  551.                         returning errorCode
  552.             end-if.
  553.  
  554.         AdviseSelect section.
  555.             move 0 to si
  556.             evaluate hszItemString
  557.                 when 'Number1'
  558.                     move 1 to si
  559.                 when 'Number2'
  560.                     move 2 to si
  561.                 when 'Number3'
  562.                     move 3 to si
  563.                 when other
  564.             end-evaluate.
  565.  
  566.         Refresh Section.
  567.             call OS2API '__WinSetWindowText'
  568.                         using by value hwndStatus
  569.                               by reference DDEMsg.
  570.  
  571.       * Callback function from DDEManager.
  572.         DDEXferProc Section.
  573.         ENTRY 'DDEXFER' using by value      hConv
  574.                               by value      hszTopic
  575.                               by value      hszItem
  576.                               by value      usFmt
  577.                               by value      usType
  578.                               by value      hDmgData.
  579.  
  580.             move 0 to DDEResult
  581.             move all x'00' to ConversationData
  582.  
  583.             call OS2API '__DDEMgrGetHszString' using
  584.                          by value hszTopic
  585.                          by reference hszTopicString
  586.                          by value lszTopicString
  587.  
  588.             call OS2API '__DDEMgrGetHszString' using
  589.                          by value hszItem
  590.                          by reference hszItemString
  591.                          by value lszItemString
  592.  
  593.             inspect ConversationData replacing all x"00" by space
  594.  
  595.             move spaces to DDEReply
  596.             move 1 to i
  597.             evaluate usType
  598.               when XTYP-INIT
  599.                 if hszTopic = hszSystem or hszDDETopic
  600.                     exit program returning 1
  601.  
  602.               when XTYP-WILDINIT
  603.                 call OS2API '__DDEMgrGetHsz' using
  604.                             by reference 'System' & x"00"
  605.                             returning DDEReply(i:2)
  606.                 add 2 to i
  607.                 call OS2API '__DDEMgrGetHsz' using
  608.                             by reference DDETopic
  609.                             returning DDEReply(i:2)
  610.                 add 2 to i
  611.  
  612.               when XTYP-UNREGISTER
  613.                 if hszItem = hszTargetApp
  614.                     set hConversation to null
  615.                     move 'DDE Target not available' & x"00" to DDEMsg
  616.                     perform Refresh
  617.                 end-if
  618.  
  619.               when XTYP-EXEC
  620.                 call OS2API '__DDEMgrGetData' using
  621.                             by value hDmgData
  622.                             by reference DDEReply
  623.                             by value 40 size 4
  624.                             by value 0 size 4
  625.                 if DDEReply(1:10) = '[FORMULA("'
  626.                     unstring DDEReply(11:) delimited by '"'
  627.                         into SelectedColour
  628.                     inspect SelectedColour
  629.                             replacing first space by x"00"
  630.                     if hwndListbox not = 0
  631.                         call OS2API '__WinSendMsg' using
  632.                                     by value hwndListbox
  633.                                     by value LM-SEARCHSTRING size 2
  634.                                     by value LIT-FIRST-HIGH size 4
  635.                                     by reference SelectedColour
  636.                                     returning i
  637.                         call OS2API '__WinSendMsg' using
  638.                                     by value hwndListbox
  639.                                     by value LM-SELECTITEM size 2
  640.                                     by value i
  641.                                     by value 1 size 4
  642.                         move spaces to DDEReply
  643.                         move DDE-FACK to DDEResult
  644.                     end-if
  645.                 end-if
  646.  
  647.               when XTYP-REQUEST
  648.               when XTYP-ADVREQ
  649.                 evaluate hszTopic
  650.                   when hszSystem
  651.                     evaluate hszItem
  652.                       when hszTopics
  653.                         string 'System' & x"09"
  654.                                L-TARGETTOPIC
  655.                             delimited by size
  656.                             into DDEReply pointer i
  657.                       when hszSysItems
  658.                         string 'Topics'   & x"09"
  659.                                'SysItems' & x"09"
  660.                                'Status'
  661.                             delimited by size
  662.                             into DDEReply pointer i
  663.                       when hszStatus
  664.                         string 'OK' delimited by size
  665.                           into DDEReply pointer i
  666.                       when other
  667.                     end-evaluate
  668.                   when other
  669.                     string SelectedColour delimited by x"00"
  670.                            into DDEReply pointer i
  671.                 end-evaluate
  672.  
  673.               when XTYP-ADVDATA
  674.  
  675.       * Topic and Item are reversed here...
  676.                 if hszTopicString = L-TESTDATA
  677.                     perform AdviseSelect
  678.                     move all x'00' to DDEReply
  679.                     call OS2API '__DDEMgrGetData' using
  680.                                 by value hDmgData
  681.                                 by reference DDEReply
  682.                                 by value 40 size 4
  683.                                 by value 0 size 4
  684.                     call OS2API '__DDEMgrFreeData' using
  685.                                 by value hDmgData
  686.                     perform UpdateNumbers
  687.                 end-if
  688.  
  689.               when XTYP-ADVSTART
  690.                 if usFmt = DDEFMT-TEXT
  691.                     if hszItemString = L-TARGETCELL
  692.                         set AdviseOK to TRUE
  693.                         call OS2API '__DDEMgrIncHszCount' using
  694.                                     by value hszTopic
  695.                         set hszAdviseTopic to hszTopic
  696.                         call OS2API '__DDEMgrIncHszCount' using
  697.                                     by value hszItem
  698.                         set hszAdviseItem to hszItem
  699.                         move 1 to DDEResult
  700.                     end-if
  701.                 end-if
  702.  
  703.               when XTYP-ADVSTOP
  704.                 if hszItemString = L-TARGETCELL
  705.                     set AdviseOff to TRUE
  706.                     call OS2API '__DDEMgrFreeHsz' using
  707.                                 by value hszAdviseTopic
  708.                     call OS2API '__DDEMgrFreeHsz' using
  709.                                 by value hszAdviseItem
  710.                     move 1 to DDEResult
  711.                 end-if
  712.  
  713.               when other
  714.             end-evaluate
  715.  
  716.             if DDEReply not = spaces
  717.  
  718.                 move x"00" to DDEReply(i:1)
  719.  
  720.                 call OS2API '__DDEMgrPutData' using
  721.                             by reference    DDEReply
  722.                             by value        i
  723.                             by value        0 size 4
  724.                             by value        hszItem
  725.                             by value        DDEFMT-TEXT size 2
  726.                             by value        0 size 2
  727.                             returning       DDEResult
  728.  
  729.                 call OS2API '__DDEMgrGetLastError'
  730.                         returning errorCode
  731.  
  732.             end-if
  733.  
  734.             exit program returning DDEResult.
  735.