no response after try to connect to remote host-VBForums
Results 1 to 8 of 8

Thread: no response after try to connect to remote host

  1. #1

    Thread Starter
    New Member
    Join Date
    Oct 2012
    Location
    Indonesia
    Posts
    5

    Question no response after try to connect to remote host

    Hello,

    I'm a beginner who wanna try to make a simple telnet client app, that connected to TPF mainframe using port 23.
    I have coded the app as below:

    Code:
    Private Const resdip = "172.25.203.194", telnetport = 23
    
    Private Sub cmdConnect_Click()
    con.Connect
    cmdConnect.Visible = False 'prevent to clicked twice
    End Sub
    
    Private Sub con_DataArrival(ByVal bytesTotal As Long)
    Dim reply_out As String
    textOut.Visible = True
    textOut.Text = textOut.Text & reply_out
    End Sub
    
    Private Sub con_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    txtlog "Something's went wrong!" & Description & Number & vbclrf
    End Sub
    
    Private Sub Form_Load()
    
    If con.State = sckConnected Or con.RemoteHost <> resdip Or con.RemotePort <> telnetport Then
    con.Close
    End If
    
    con.RemoteHost = resdip
    con.RemotePort = telnetport
    
    If con.State <> sckConnected Then
    textOut.Visible = False
    cmdConnect.Visible = True 'suppress default value
    End If
    End Sub
    After the form's loaded, I got the Connect button (named as cmdConnect) appeared, and it's because the winsock (named as con) state not equal to sckConnected.
    After I try to connect it, there is no response I got.
    Anyone please help me or give me some advise. Any help is appreciated.

    Thanks


    - Ron -

  2. #2
    PowerPoster
    Join Date
    Jul 2006
    Location
    Maldon, Essex. UK
    Posts
    6,260

    Re: no response after try to connect to remote host

    The DataArrival event is triggered when something has been received. You have to read it.
    Code:
    Private Sub con_DataArrival(ByVal bytesTotal As Long)
    Dim reply_out As String
    con.GetData reply_out
    textOut.Visible = True
    textOut.Text = textOut.Text & reply_out
    End Sub

  3. #3

    Thread Starter
    New Member
    Join Date
    Oct 2012
    Location
    Indonesia
    Posts
    5

    Re: no response after try to connect to remote host

    Quote Originally Posted by Doogle View Post
    The DataArrival event is triggered when something has been received. You have to read it.
    Code:
    Private Sub con_DataArrival(ByVal bytesTotal As Long)
    Dim reply_out As String
    con.GetData reply_out
    textOut.Visible = True
    textOut.Text = textOut.Text & reply_out
    End Sub
    Thanks Doogle it works now, however I got the data in EBCDIC format and I'm looking for how to translate it to ASCII format.
    But thanks for your correction.

  4. #4
    PowerPoster
    Join Date
    Jul 2006
    Location
    Maldon, Essex. UK
    Posts
    6,260

    Re: no response after try to connect to remote host

    Simplest method might be to create a 'look-up' array with 256 elements, each element holding the ASCII equivalent for the EBCDIC value. e.g. Lookup(193) would contain "A" ,where 193 is the EBCDIC value for 'A' = Hex(C1) = 193

    There's a translation table here: http://www.simotime.com/asc2ebc1.htm

  5. #5
    PowerPoster
    Join Date
    Jul 2006
    Location
    Maldon, Essex. UK
    Posts
    6,260

    Re: no response after try to connect to remote host

    Here's one I made earlier. It just translates printable characters, all others return 255
    Code:
    Option Explicit
    
    Private EBCDICLookup(255) As String
    
    Public Sub SetUpTranslate()
    EBCDICLookup(0) = Chr(255)      ' Unprintable
    EBCDICLookup(1) = Chr(255)      ' Unprintable
    EBCDICLookup(2) = Chr(255)      ' Unprintable
    EBCDICLookup(3) = Chr(255)      ' Unprintable
    EBCDICLookup(4) = Chr(255)      ' Unprintable
    EBCDICLookup(5) = Chr(255)      ' Unprintable
    EBCDICLookup(6) = Chr(255)      ' Unprintable
    EBCDICLookup(7) = Chr(255)      ' Unprintable
    EBCDICLookup(8) = Chr(255)      ' Unprintable
    EBCDICLookup(9) = Chr(255)      ' Unprintable
    EBCDICLookup(10) = Chr(255)     ' Unprintable
    EBCDICLookup(11) = Chr(255)     ' Unprintable
    EBCDICLookup(12) = Chr(255)     ' Unprintable
    EBCDICLookup(13) = Chr(255)     ' Unprintable
    EBCDICLookup(14) = Chr(255)     ' Unprintable
    EBCDICLookup(15) = Chr(255)     ' Unprintable
    EBCDICLookup(16) = Chr(255)     ' Unprintable
    EBCDICLookup(17) = Chr(255)     ' Unprintable
    EBCDICLookup(18) = Chr(255)     ' Unprintable
    EBCDICLookup(19) = Chr(255)     ' Unprintable
    EBCDICLookup(20) = Chr(255)     ' Unprintable
    EBCDICLookup(21) = Chr(255)     ' Unprintable
    EBCDICLookup(22) = Chr(255)     ' Unprintable
    EBCDICLookup(23) = Chr(255)     ' Unprintable
    EBCDICLookup(24) = Chr(255)     ' Unprintable
    EBCDICLookup(25) = Chr(255)     ' Unprintable
    EBCDICLookup(26) = Chr(255)     ' Unprintable
    EBCDICLookup(27) = Chr(255)     ' Unprintable
    EBCDICLookup(28) = Chr(255)     ' Unprintable
    EBCDICLookup(29) = Chr(255)     ' Unprintable
    EBCDICLookup(30) = Chr(255)     ' Unprintable
    EBCDICLookup(31) = Chr(255)     ' Unprintable
    EBCDICLookup(32) = Chr(255)     ' Unprintable
    EBCDICLookup(33) = Chr(255)     ' Unprintable
    EBCDICLookup(34) = Chr(255)     ' Unprintable
    EBCDICLookup(35) = Chr(255)     ' Unprintable
    EBCDICLookup(36) = Chr(255)     ' Unprintable
    EBCDICLookup(37) = Chr(255)     ' Unprintable
    EBCDICLookup(38) = Chr(255)     ' Unprintable
    EBCDICLookup(39) = Chr(255)     ' Unprintable
    EBCDICLookup(40) = Chr(255)     ' Unprintable
    EBCDICLookup(41) = Chr(255)     ' Unprintable
    EBCDICLookup(42) = Chr(255)     ' Unprintable
    EBCDICLookup(43) = Chr(255)     ' Unprintable
    EBCDICLookup(44) = Chr(255)     ' Unprintable
    EBCDICLookup(45) = Chr(255)     ' Unprintable
    EBCDICLookup(46) = Chr(255)     ' Unprintable
    EBCDICLookup(47) = Chr(255)     ' Unprintable
    EBCDICLookup(48) = Chr(255)     ' Unprintable
    EBCDICLookup(49) = Chr(255)     ' Unprintable
    EBCDICLookup(50) = Chr(255)     ' Unprintable
    EBCDICLookup(51) = Chr(255)     ' Unprintable
    EBCDICLookup(52) = Chr(255)     ' Unprintable
    EBCDICLookup(53) = Chr(255)     ' Unprintable
    EBCDICLookup(54) = Chr(255)     ' Unprintable
    EBCDICLookup(55) = Chr(255)     ' Unprintable
    EBCDICLookup(56) = Chr(255)     ' Unprintable
    EBCDICLookup(57) = Chr(255)     ' Unprintable
    EBCDICLookup(58) = Chr(255)     ' Unprintable
    EBCDICLookup(59) = Chr(255)     ' Unprintable
    EBCDICLookup(60) = Chr(255)     ' Unprintable
    EBCDICLookup(61) = Chr(255)     ' Unprintable
    EBCDICLookup(62) = Chr(255)     ' Unprintable
    EBCDICLookup(63) = Chr(255)     ' Unprintable
    EBCDICLookup(64) = Chr(255)     ' Unprintable
    EBCDICLookup(65) = Chr(255)     ' Unprintable
    EBCDICLookup(66) = Chr(255)     ' Unprintable
    EBCDICLookup(67) = Chr(255)     ' Unprintable
    EBCDICLookup(68) = Chr(255)     ' Unprintable
    EBCDICLookup(69) = Chr(255)     ' Unprintable
    EBCDICLookup(70) = Chr(255)     ' Unprintable
    EBCDICLookup(71) = Chr(255)     ' Unprintable
    EBCDICLookup(72) = Chr(255)     ' Unprintable
    EBCDICLookup(73) = Chr(255)     ' Unprintable
    EBCDICLookup(74) = Chr(162)     '
    EBCDICLookup(75) = Chr(46)      '.
    EBCDICLookup(76) = Chr(60)      '<
    EBCDICLookup(77) = Chr(40)      '(
    EBCDICLookup(78) = Chr(43)      '+
    EBCDICLookup(79) = Chr(124)     '|
    EBCDICLookup(80) = Chr(255)     ' Unprintable
    EBCDICLookup(81) = Chr(255)     ' Unprintable
    EBCDICLookup(82) = Chr(255)     ' Unprintable
    EBCDICLookup(83) = Chr(255)     ' Unprintable
    EBCDICLookup(84) = Chr(255)     ' Unprintable
    EBCDICLookup(85) = Chr(255)     ' Unprintable
    EBCDICLookup(86) = Chr(255)     ' Unprintable
    EBCDICLookup(87) = Chr(255)     ' Unprintable
    EBCDICLookup(88) = Chr(255)     ' Unprintable
    EBCDICLookup(89) = Chr(255)     ' Unprintable
    EBCDICLookup(90) = Chr(33)      '!
    EBCDICLookup(91) = Chr(36)      '$
    EBCDICLookup(92) = Chr(42)      '*
    EBCDICLookup(93) = Chr(41)      ')
    EBCDICLookup(94) = Chr(59)      ';
    EBCDICLookup(95) = Chr(172)     '
    EBCDICLookup(96) = Chr(45)      '-
    EBCDICLookup(97) = Chr(47)      '/
    EBCDICLookup(98) = Chr(255)     ' Unprintable
    EBCDICLookup(99) = Chr(255)     ' Unprintable
    EBCDICLookup(100) = Chr(255)    ' Unprintable
    EBCDICLookup(101) = Chr(255)    ' Unprintable
    EBCDICLookup(102) = Chr(255)    ' Unprintable
    EBCDICLookup(103) = Chr(255)    ' Unprintable
    EBCDICLookup(104) = Chr(255)    ' Unprintable
    EBCDICLookup(105) = Chr(255)    ' Unprintable
    EBCDICLookup(106) = Chr(166)    '
    EBCDICLookup(107) = Chr(44)     ',
    EBCDICLookup(108) = Chr(37)     '%
    EBCDICLookup(109) = Chr(95)     '_
    EBCDICLookup(110) = Chr(62)     '>
    EBCDICLookup(111) = Chr(63)     '?
    EBCDICLookup(112) = Chr(255)    ' Unprintable
    EBCDICLookup(113) = Chr(255)    ' Unprintable
    EBCDICLookup(114) = Chr(255)    ' Unprintable
    EBCDICLookup(115) = Chr(255)    ' Unprintable
    EBCDICLookup(116) = Chr(255)    ' Unprintable
    EBCDICLookup(117) = Chr(255)    ' Unprintable
    EBCDICLookup(118) = Chr(255)    ' Unprintable
    EBCDICLookup(119) = Chr(255)    ' Unprintable
    EBCDICLookup(120) = Chr(255)    ' Unprintable
    EBCDICLookup(121) = Chr(96)     '`
    EBCDICLookup(122) = Chr(58)     ':
    EBCDICLookup(123) = Chr(35)     '#
    EBCDICLookup(124) = Chr(64)     '@
    EBCDICLookup(125) = Chr(39)     ''
    EBCDICLookup(126) = Chr(61)     '=
    EBCDICLookup(127) = Chr(34)     '"
    EBCDICLookup(128) = Chr(255)    ' Unprintable
    EBCDICLookup(129) = Chr(97)     'a
    EBCDICLookup(130) = Chr(98)     'b
    EBCDICLookup(131) = Chr(99)     'c
    EBCDICLookup(132) = Chr(100)    'd
    EBCDICLookup(133) = Chr(101)    'e
    EBCDICLookup(134) = Chr(102)    'f
    EBCDICLookup(135) = Chr(103)    'g
    EBCDICLookup(136) = Chr(104)    'h
    EBCDICLookup(137) = Chr(105)    'i
    EBCDICLookup(138) = Chr(255)    ' Unprintable
    EBCDICLookup(139) = Chr(255)    ' Unprintable
    EBCDICLookup(140) = Chr(255)    ' Unprintable
    EBCDICLookup(141) = Chr(255)    ' Unprintable
    EBCDICLookup(142) = Chr(255)    ' Unprintable
    EBCDICLookup(143) = Chr(255)    ' Unprintable
    EBCDICLookup(144) = Chr(255)    ' Unprintable
    EBCDICLookup(145) = Chr(106)    'j
    EBCDICLookup(146) = Chr(107)    'k
    EBCDICLookup(147) = Chr(108)    'l
    EBCDICLookup(148) = Chr(109)    'm
    EBCDICLookup(149) = Chr(110)    'n
    EBCDICLookup(150) = Chr(111)    'o
    EBCDICLookup(151) = Chr(112)    'p
    EBCDICLookup(152) = Chr(113)    'q
    EBCDICLookup(153) = Chr(114)    'r
    EBCDICLookup(154) = Chr(255)    ' Unprintable
    EBCDICLookup(155) = Chr(255)    ' Unprintable
    EBCDICLookup(156) = Chr(255)    ' Unprintable
    EBCDICLookup(157) = Chr(255)    ' Unprintable
    EBCDICLookup(158) = Chr(255)    ' Unprintable
    EBCDICLookup(159) = Chr(255)    ' Unprintable
    EBCDICLookup(160) = Chr(255)    ' Unprintable
    EBCDICLookup(161) = Chr(126)    '~
    EBCDICLookup(162) = Chr(115)    's
    EBCDICLookup(163) = Chr(116)    't
    EBCDICLookup(164) = Chr(117)    'u
    EBCDICLookup(165) = Chr(118)    'v
    EBCDICLookup(166) = Chr(119)    'w
    EBCDICLookup(167) = Chr(120)    'x
    EBCDICLookup(168) = Chr(121)    'y
    EBCDICLookup(169) = Chr(122)    'z
    EBCDICLookup(170) = Chr(255)    ' Unprintable
    EBCDICLookup(171) = Chr(255)    ' Unprintable
    EBCDICLookup(172) = Chr(255)    ' Unprintable
    EBCDICLookup(173) = Chr(255)    ' Unprintable
    EBCDICLookup(174) = Chr(255)    ' Unprintable
    EBCDICLookup(175) = Chr(255)    ' Unprintable
    EBCDICLookup(176) = Chr(255)    ' Unprintable
    EBCDICLookup(177) = Chr(255)    ' Unprintable
    EBCDICLookup(178) = Chr(255)    ' Unprintable
    EBCDICLookup(179) = Chr(255)    ' Unprintable
    EBCDICLookup(180) = Chr(255)    ' Unprintable
    EBCDICLookup(181) = Chr(255)    ' Unprintable
    EBCDICLookup(182) = Chr(255)    ' Unprintable
    EBCDICLookup(183) = Chr(255)    ' Unprintable
    EBCDICLookup(184) = Chr(255)    ' Unprintable
    EBCDICLookup(185) = Chr(255)    ' Unprintable
    EBCDICLookup(186) = Chr(255)    ' Unprintable
    EBCDICLookup(187) = Chr(255)    ' Unprintable
    EBCDICLookup(188) = Chr(255)    ' Unprintable
    EBCDICLookup(189) = Chr(255)    ' Unprintable
    EBCDICLookup(190) = Chr(255)    ' Unprintable
    EBCDICLookup(191) = Chr(255)    ' Unprintable
    EBCDICLookup(192) = Chr(123)    '{
    EBCDICLookup(193) = Chr(65)     'A
    EBCDICLookup(194) = Chr(66)     'B
    EBCDICLookup(195) = Chr(67)     'C
    EBCDICLookup(196) = Chr(68)     'D
    EBCDICLookup(197) = Chr(69)     'E
    EBCDICLookup(198) = Chr(70)     'F
    EBCDICLookup(199) = Chr(71)     'G
    EBCDICLookup(200) = Chr(72)     'H
    EBCDICLookup(201) = Chr(73)     'I
    EBCDICLookup(202) = Chr(255)    ' Unprintable
    EBCDICLookup(203) = Chr(255)    ' Unprintable
    EBCDICLookup(204) = Chr(255)    ' Unprintable
    EBCDICLookup(205) = Chr(255)    ' Unprintable
    EBCDICLookup(206) = Chr(255)    ' Unprintable
    EBCDICLookup(207) = Chr(255)    ' Unprintable
    EBCDICLookup(208) = Chr(125)    '}
    EBCDICLookup(209) = Chr(74)     'J
    EBCDICLookup(210) = Chr(75)     'K
    EBCDICLookup(211) = Chr(76)     'L
    EBCDICLookup(212) = Chr(77)     'M
    EBCDICLookup(213) = Chr(78)     'N
    EBCDICLookup(214) = Chr(79)     'O
    EBCDICLookup(215) = Chr(80)     'P
    EBCDICLookup(216) = Chr(81)     'Q
    EBCDICLookup(217) = Chr(82)     'R
    EBCDICLookup(218) = Chr(255)    ' Unprintable
    EBCDICLookup(219) = Chr(255)    ' Unprintable
    EBCDICLookup(220) = Chr(255)    ' Unprintable
    EBCDICLookup(221) = Chr(255)    ' Unprintable
    EBCDICLookup(222) = Chr(255)    ' Unprintable
    EBCDICLookup(223) = Chr(255)    ' Unprintable
    EBCDICLookup(224) = Chr(92)     '\
    EBCDICLookup(225) = Chr(255)    ' Unprintable
    EBCDICLookup(226) = Chr(83)     'S
    EBCDICLookup(227) = Chr(84)     'T
    EBCDICLookup(228) = Chr(85)     'U
    EBCDICLookup(229) = Chr(86)     'V
    EBCDICLookup(230) = Chr(87)     'W
    EBCDICLookup(231) = Chr(88)     'X
    EBCDICLookup(232) = Chr(89)     'Y
    EBCDICLookup(233) = Chr(90)     'Z
    EBCDICLookup(234) = Chr(255)    ' Unprintable
    EBCDICLookup(235) = Chr(255)    ' Unprintable
    EBCDICLookup(236) = Chr(255)    ' Unprintable
    EBCDICLookup(237) = Chr(255)    ' Unprintable
    EBCDICLookup(238) = Chr(255)    ' Unprintable
    EBCDICLookup(239) = Chr(255)    ' Unprintable
    EBCDICLookup(240) = Chr(48)     '0
    EBCDICLookup(241) = Chr(49)     '1
    EBCDICLookup(242) = Chr(50)     '2
    EBCDICLookup(243) = Chr(51)     '3
    EBCDICLookup(244) = Chr(52)     '4
    EBCDICLookup(245) = Chr(53)     '5
    EBCDICLookup(246) = Chr(54)     '6
    EBCDICLookup(247) = Chr(55)     '7
    EBCDICLookup(248) = Chr(56)     '8
    EBCDICLookup(249) = Chr(57)     '9
    EBCDICLookup(250) = Chr(255)    ' Unprintable
    EBCDICLookup(251) = Chr(255)    ' Unprintable
    EBCDICLookup(252) = Chr(255)    ' Unprintable
    EBCDICLookup(253) = Chr(255)    ' Unprintable
    EBCDICLookup(254) = Chr(255)    ' Unprintable
    EBCDICLookup(255) = Chr(255)    ' Unprintable
    End Sub
    
    Public Function Translate(strEBCDIC As String) As String
    Dim intI As Integer
    If Len(strEBCDIC) > 0 Then
        For intI = 1 To Len(strEBCDIC)
            Translate = Translate & EBCDICLookup(Asc(Mid$(strEBCDIC, intI, 1)))
        Next intI
    End If
    End Function
    Just stick that into a Module and put
    Code:
    SetUpTranslate
    in your Form_Load event and when you want to translate an EBCDIC string to ASCII use
    Code:
    Dim strASCII as String
    strASCII = Translate(strEBCDIC)
    where strEBCDIC is the string of EBCDIC characters.
    Last edited by Doogle; Nov 2nd, 2012 at 03:27 AM.

  6. #6
    PowerPoster
    Join Date
    Jul 2006
    Location
    Maldon, Essex. UK
    Posts
    6,260

    Re: no response after try to connect to remote host

    BTW I didn't sit and type all that in, I used the following code and attached file to create the module. I've posted it here so you can simply make any changes to the file (eg if you want to translate some of the unprintable characters), run the code and it will create the .bas module for you. (Just change the Paths to the input and output files as necessary)
    Code:
    Option Explicit
    
    Private Sub Command_Click()
    Dim strData As String
    Dim strLines() As String
    Dim strLine() As String
    Dim intFile As Integer
    Dim intFileOut As Integer
    Dim intI As Integer
    Dim intLoc As Integer
    intFile = FreeFile()
    Open "C:\MyDir\ebcdic.txt" For Input As intFile
    intFileOut = FreeFile()
    Open "C:\myDir\modEbcdic.bas" For Output As intFileOut
    Print #intFileOut, "Option Explicit"
    Print #intFileOut,
    Print #intFileOut, "Private EBCDICLookup(255) As String"
    Print #intFileOut,
    Print #intFileOut, "Public Sub SetUpTranslate()"
    strData = Input(LOF(intFile), intFile)
    Close intFile
    strLines = Split(strData, vbNewLine)
    For intI = 0 To UBound(strLines)
            strLine = Split(strLines(intI), " ")
            intLoc = CInt(strLine(0))
            If UBound(strLine) > 1 Then
                If Len(strLine(2)) = 1 Then
                    Print #intFileOut, "EBCDICLookup(" & intLoc & ") = " & "Chr(" & (Asc((strLine(2)))) & ")" & vbTab & "'" & strLine(2)
                Else
                    Print #intFileOut, "EBCDICLookup(" & intLoc & ") = Chr(255)" & vbTab & "' Unprintable"
                End If
            Else
                    Print #intFileOut, "EBCDICLookup(" & intLoc & ") = Chr(255)" & vbTab & "' Unprintable"
            End If
    Next intI
    Print #intFileOut, "End Sub"
    Print #intFileOut,
    Print #intFileOut, "Public Function Translate(strEBCDIC As String) As String"
    Print #intFileOut, "Dim intI As Integer"
    Print #intFileOut, "If Len(strEBCDIC) > 0 Then"
    Print #intFileOut, "    For intI = 1 To Len(strEBCDIC)"
    Print #intFileOut, "        Translate = Translate & Chr(EBCDICLookup(Asc(Mid$(strEBCDIC, intI, 1))))"
    Print #intFileOut, "    Next intI"
    Print #intFileOut, "End If"
    Print #intFileOut, "End Function"
    Close intFileOut
    End Sub
    Attached Files Attached Files
    Last edited by Doogle; Nov 2nd, 2012 at 03:39 AM.

  7. #7

    Thread Starter
    New Member
    Join Date
    Oct 2012
    Location
    Indonesia
    Posts
    5

    Thumbs up Re: no response after try to connect to remote host

    Hi Doogle, it works very well thanks for your big help, but there is some mistake in your module generator script, in this line:
    Code:
    Print #intFileOut, "        Translate = Translate & Chr(EBCDICLookup(Asc(Mid$(strEBCDIC, intI, 1))))"
    it should be:
    Code:
    Translate = Translate & EBCDICLookup(Asc(Mid$(strEBCDIC, intI, 1)))
    as your post above it.

    I've tested the function as below:
    Code:
    Private Sub cmdConnect_Click()
    con.Connect
    cmdConnect.Visible = False
    SetUpTranslate
    strEBCDIC = Chr(240)
    test = Translate(strEBCDIC)
    End Sub
    And returned character 0, (hex F0 in EBCDIC)

    I think this post is resolved. Thanks for the simplest solution from Doogle.

  8. #8
    PowerPoster
    Join Date
    Jul 2006
    Location
    Maldon, Essex. UK
    Posts
    6,260

    Re: no response after try to connect to remote host

    Oops, sorry about that ! Must have been a last minute change that I didn't test or something. Glad it's working now though.

    To mark the Thread as Resolved go to the top of the Thread and under the 'Thread Tools' menu, click on 'Mark Thread as Resolved', that will close it off.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Featured


Click Here to Expand Forum to Full Width

Survey posted by VBForums.