
     H DFTACTGRP(*NO) ACTGRP(*NEW) BndDir('QC2LE')
      /INCLUDE QRPGLESRC,IQSOCKW
     C*************************************************
     C* THIS PROGRAM WILL OPEN A CONNECTION WITH THE SOCKET SERVER
     C* AND PASS RAPID RELATED DATA TO AND FROM THE SERVER
     C*************************************************
     C                   eval      Delimiters = x'05'
     C                   exsr      IQOPENRAPID
     c     'Enter DPID'  dsply                   indpid
     C                   callp     DpidToAddress(%dec(indpid:10:0))
     C                   If        RC <> 0
     c                   eval      Msg = 'Error DpidToAddr - ' + %char(rc)
     c     msg           dsply
     c                   callp     close(sock)
     c                   Return
     C                   EndIf
     C                   exsr      SHOWARRAY
     C
     C*************************************************
     C* Interactive User Section - Address Search
     C*************************************************
     C                   Eval      MaxResults = 10
     C*                  Main Loop Starts
     C                   DOW       1=1
     c     askForAddr    dsply                   inAddress
     c                   If        inAddress = 'quit' or inAddress = 'QUIT'
     c                   Leave
     c                   EndIf
     c     askForLocl    dsply                   inLocality
     c                   callp     GetHintAddr(inLocality : inAddress)
     C                   If        RC <> 0
     c                   eval      Msg = 'Error GetHintAddr - ' + %char(rc)
     c     msg           dsply
     c                   callp     close(sock)
     c                   Return
     C                   EndIf
     c
     c*    Format and display address
     c                   eval      loop = 1
     c                   eval      sOut = SResult
     C                   DoW       loop < MaxResults + 1 and sOut <> ''
     C                             and %subst(sOut:1:1) <> iqdelim
     c                   eval      SResults(loop) = sOut
     c                   eval      msg = %char(loop) + ' : ' +
     c                             %subst(FormatAddress(sOut: 5):1:40)
     c     msg           dsply
     c*    Get next address by passing nulls
     c                   callp     GetHintAddr('' : '')
     c                   eval      sOut = SResult
     c                   eval      loop = loop + 1
     C                   EndDo
     C* Now dig deeper if required
     c                   If        loop = maxresults + 1
     c                   Eval      msg = 'Too many results...Not all displayed.'
     c     msg           dsply
     c                   EndIf
     C                   Eval      iChoice = 999
     C                   DoW       iChoice <> 0 and loop > 0
     c                   Eval      msg = 'Enter addr no to view (0 to exit) >'
     c     msg           dsply                   inData
     c                   Eval      iChoice = %dec(inData:10:0)
     c                   If        iChoice <> 0
     c                   Eval      sOut = sResults(iChoice)
     c                   Callp     NSplit(%addr(sOut):IQDelim)
     C*                  exsr      SHOWARRAY
     c                   If        sFields(26+1) = 'F'
     c*                  Show final address
     c                   eval      msg = 'Final Addr #' + %char(iChoice) + ': '
     c                             + %subst(FormatAddress(sOut: 5):1:40)
     c     msg           dsply
     c                   Else
     c*                  Not a final address so dig deeper
     c                   CallP     GetAddress(%addr(sOut))
     c                   Eval      sOut = sResult
      *                  Show all matches
     c                   Eval      iChoice = 999
     c                   eval      loop = 1
     c                   DOW       sOut <> '' and %subst(sOut:1:1) <> x'05'
     c                             and loop < 11
      *                  Save result for later
     c                   eval      SResults(loop) = sOut
      *                  Format and display address
     c                   eval      msg = '#' + %char(loop) + ': '
     c                             + %subst(FormatAddress(sOut: 5):1:40)
     c     msg           dsply
      *                  Get next address by passing Null
     c                   Eval      sOut = ''
     c                   CallP     GetAddress(%addr(sOut))
     c                   Eval      sOut = sResult
     c                   Eval      loop = loop + 1
     c                   EndDo
     c                   If        loop = maxresults + 1
     c                   Eval      msg = 'Too many results...Not all displayed.'
     c     msg           dsply
     c                   EndIf
      *                  End Final Address
     C                   EndIf
      *                  End Choice Chosen <> 0
     C                   EndIf
     C                   EndDo
      *                  End Main Loop
     C                   EndDo
     C***************************************
     C* User Interactive Address Validation *
     C***************************************
     C*
     C*
     c                   Eval      msg = 'User Interactive Address Validation'
     c     msg           dsply
     C                   DOW       1=1
      *				// prompt for address
     c                   Eval      msg = 'Address to validate or (QUIT)'
     c     msg           dsply
     c                   Eval      inAddress = ''
     c                   dsply                   inAddress
     c                   If        inAddress = 'quit' or inAddress = 'QUIT'
     c                             or inAddress = ''
     c                   Leave
     c                   EndIf
      *				Validate address
     c                   CallP     ValFullAddress(%addr(inAddress):'0')
     c                   If        RC = 0
     c                   Eval      sOut = sResult
      *				Split up address validated into individual fields
     c                   Callp     NSplit(%addr(sOut):iqdelim)
      *				// show each field with its name
     C                   exsr      SHOWARRAY
      *				Show the formatted address
     c                   eval      msg = %subst(FormatAddress(sOut: 5):1:50)
     c                   else
     c                   eval      msg = 'Non 0 return code'
     c                   EndIf
     c     msg           dsply
     C                   EndDo
     C*
     C*************************************************
     C*  We're done, so close the socket.
     C*   do a dsply with input to pause the display
     C*   and then end the program
     C*************************************************
     C                   exsr      IQSOCKCLOSE
     c                   dsply                   pause             1
     c                   return
     C*-------------------------------------------------------------
     C*SUBROUTINES START HERE
     C*-------------------------------------------------------------
     C     IQOPENRAPID   begsr
     C*------------------------
     c                   eval      host ='I3'
     c                   eval      port =4001
     C                   exsr      SOCKCONN
     C                   CallP     OpenPafMemId(pafid)
     C                   If        RC <> 0
     c                   eval      Msg = 'Error opening Rapid!'
     c     msg           dsply
     c                   callp     close(sock)
     c                   Return
     C                   EndIf
     C                   CallP     Properties('OutputFields')
     c                   Callp     NSplit(%addr(sResult):';')
     c                   Eval      sFIELDNMs = sFields
     C                   endsr
     C     IQSOCKCLOSE   begsr
     C*------------------------
     C*
     c                   callp     close(sock)
     c
     c                   return
     C                   endsr
     C     SHOWARRAY     begsr
     C*------------------------
     C* Pos 1 of array is the total number of elements excluding pos 1
     C* Show from pos 2
     C                   For       loop = 2 to %dec(sFIELDs(1):10:0) + 1
     C                   If        sFIELDs(loop) <> ''
     c                   eval      msg = '#[' + %subst(%editc(loop-1 : '1'):12)
     c                             + '] >' +' [' + sFIELDNMs(loop) + '] >'
     c                             + sFIELDs(loop)
     c     msg           dsply
     c                   EndIf
     C                   EndFor
     C                   endsr

      /INCLUDE QRPGLESRC,IQSOCKP
