ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/winhost/nettest.frm
(Generate patch)

Comparing projects/cms/source/host/winhost/nettest.frm (file contents):
Revision 1.1 by pjm2, Thu Feb 22 17:04:22 2001 UTC vs.
Revision 1.26 by pjm2, Wed Feb 28 09:08:08 2001 UTC

# Line 1 | Line 1
1   VERSION 5.00
2   Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
3 + Object = "{33155A3D-0CE0-11D1-A6B4-444553540000}#1.0#0"; "SysTray.ocx"
4   Begin VB.Form Form1
5     BorderStyle     =   3  'Fixed Dialog
6 <   Caption         =   "TCP/UDP Test program"
7 <   ClientHeight    =   5655
6 >   Caption         =   "i-scream Winhost"
7 >   ClientHeight    =   4905
8     ClientLeft      =   45
9     ClientTop       =   330
10 <   ClientWidth     =   5670
10 >   ClientWidth     =   4710
11 >   Icon            =   "nettest.frx":0000
12     LinkTopic       =   "Form1"
13     MaxButton       =   0   'False
14     MinButton       =   0   'False
15 <   ScaleHeight     =   5655
16 <   ScaleWidth      =   5670
15 >   ScaleHeight     =   4905
16 >   ScaleWidth      =   4710
17     ShowInTaskbar   =   0   'False
18 <   StartUpPosition =   3  'Windows Default
19 <   Begin VB.CommandButton Command3
20 <      Caption         =   "TCP to Filter"
21 <      Height          =   375
22 <      Left            =   3720
23 <      TabIndex        =   9
24 <      Top             =   2520
25 <      Width           =   1575
18 >   StartUpPosition =   2  'CenterScreen
19 >   Visible         =   0   'False
20 >   Begin VB.CommandButton Command1
21 >      Caption         =   "more"
22 >      Height          =   255
23 >      Left            =   3960
24 >      TabIndex        =   8
25 >      Top             =   840
26 >      Width           =   615
27     End
28 <   Begin VB.TextBox Text4
29 <      Height          =   2535
30 <      Left            =   240
28 >   Begin VB.TextBox Text1
29 >      Height          =   2055
30 >      Left            =   120
31 >      Locked          =   -1  'True
32        MultiLine       =   -1  'True
33        ScrollBars      =   2  'Vertical
34 <      TabIndex        =   8
35 <      Text            =   "nettest.frx":0000
36 <      Top             =   3000
33 <      Width           =   5055
34 >      TabIndex        =   7
35 >      Top             =   1200
36 >      Width           =   4455
37     End
38 <   Begin VB.CommandButton Command2
39 <      Caption         =   "TCP to FilterManager"
38 >   Begin VB.CommandButton Hide
39 >      Caption         =   "Hide Window"
40        Height          =   375
41 <      Left            =   3360
42 <      TabIndex        =   7
43 <      Top             =   2040
44 <      Width           =   1935
41 >      Left            =   3120
42 >      TabIndex        =   6
43 >      Top             =   240
44 >      Width           =   1455
45     End
46 <   Begin MSWinsockLib.Winsock Winsock2
47 <      Left            =   4920
48 <      Top             =   120
49 <      _ExtentX        =   741
50 <      _ExtentY        =   741
51 <      _Version        =   393216
46 >   Begin SysTray.SystemTray SystemTray
47 >      Left            =   2520
48 >      Top             =   4200
49 >      _ExtentX        =   847
50 >      _ExtentY        =   847
51 >      SysTrayText     =   "i-scream Winhost"
52 >      IconFile        =   0
53     End
54 <   Begin VB.TextBox Text3
55 <      Height          =   285
56 <      Left            =   1680
53 <      TabIndex        =   5
54 <      Text            =   "killigrew.ukc.ac.uk"
55 <      Top             =   1560
56 <      Width           =   2535
54 >   Begin VB.Timer Timer1
55 >      Left            =   3120
56 >      Top             =   4200
57     End
58 <   Begin VB.TextBox Text2
59 <      Height          =   285
60 <      Left            =   1680
61 <      TabIndex        =   3
62 <      Text            =   "4567"
63 <      Top             =   1920
64 <      Width           =   855
65 <   End
66 <   Begin VB.CommandButton Command1
67 <      Caption         =   "Send UDP"
58 >   Begin VB.CommandButton Reconfigure
59 >      Caption         =   "Reconfigure with FilterManager"
60        Height          =   375
61 <      Left            =   4320
70 <      TabIndex        =   2
71 <      Top             =   1560
72 <      Width           =   975
73 <   End
74 <   Begin VB.TextBox Text1
75 <      Height          =   855
76 <      Left            =   360
61 >      Left            =   840
62        TabIndex        =   0
63 <      Text            =   "<packet></packet>"
64 <      Top             =   600
80 <      Width           =   4935
63 >      Top             =   3480
64 >      Width           =   2895
65     End
66 <   Begin MSWinsockLib.Winsock Winsock1
67 <      Left            =   4320
68 <      Top             =   120
66 >   Begin MSWinsockLib.Winsock TCPSock
67 >      Left            =   4080
68 >      Top             =   4200
69        _ExtentX        =   741
70        _ExtentY        =   741
71        _Version        =   393216
72 +   End
73 +   Begin MSWinsockLib.Winsock UDPSock
74 +      Left            =   3600
75 +      Top             =   4200
76 +      _ExtentX        =   741
77 +      _ExtentY        =   741
78 +      _Version        =   393216
79        Protocol        =   1
80     End
81 <   Begin VB.Label Label3
81 >   Begin VB.Label Label2
82        Alignment       =   1  'Right Justify
83 <      Caption         =   "Destination:"
83 >      Caption         =   "Next heartbeat:"
84        Height          =   255
85 <      Left            =   360
86 <      TabIndex        =   6
87 <      Top             =   1560
88 <      Width           =   1215
85 >      Left            =   120
86 >      TabIndex        =   5
87 >      Top             =   480
88 >      Width           =   1455
89     End
90 <   Begin VB.Label Label2
90 >   Begin VB.Label Label1
91        Alignment       =   1  'Right Justify
92 <      Caption         =   "Port:"
92 >      Caption         =   "Next UDP packet:"
93        Height          =   255
94 <      Left            =   360
94 >      Left            =   120
95        TabIndex        =   4
96 <      Top             =   1920
97 <      Width           =   1215
96 >      Top             =   120
97 >      Width           =   1455
98     End
99 <   Begin VB.Label Label1
100 <      Caption         =   "Packet contents"
99 >   Begin VB.Label Label4
100 >      BorderStyle     =   1  'Fixed Single
101 >      Caption         =   "0"
102        Height          =   255
103 <      Left            =   360
103 >      Left            =   1680
104 >      TabIndex        =   3
105 >      Top             =   480
106 >      Width           =   615
107 >   End
108 >   Begin VB.Label Label3
109 >      BorderStyle     =   1  'Fixed Single
110 >      Caption         =   "0"
111 >      Height          =   255
112 >      Left            =   1680
113 >      TabIndex        =   2
114 >      Top             =   120
115 >      Width           =   615
116 >   End
117 >   Begin VB.Label Status
118 >      Alignment       =   2  'Center
119 >      Caption         =   "Status:"
120 >      Height          =   255
121 >      Left            =   0
122        TabIndex        =   1
123 <      Top             =   360
124 <      Width           =   2895
123 >      Top             =   840
124 >      Width           =   3855
125     End
126   End
127   Attribute VB_Name = "Form1"
# Line 119 | Line 129 | Attribute VB_GlobalNameSpace = False
129   Attribute VB_Creatable = False
130   Attribute VB_PredeclaredId = True
131   Attribute VB_Exposed = False
132 < Dim responseNumber As Integer
132 > ' For the system tray bits
133 > Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
134 > Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
135  
136 + Dim filterManagerHostname As String
137 + Dim filterManagerTCPPort As Long
138  
139 + Dim seqNo As Long
140 + Dim machineName As String
141 +
142 + Dim filterHostname As String
143 + Dim filterTCPPort As Integer
144 + Dim filterUDPPort As Integer
145 + Dim fileList As String
146 + Dim lastModified As String
147 +
148 + Dim UDPUpdateTime As Integer
149 + Dim TCPUpdateTime As Integer
150 +
151 + Dim protocolVersion As String
152 + Dim connected As Boolean
153 +
154 + Dim CUpTime As New CUpTime
155 + Dim wksta As New CNetWksta
156 +
157 + Dim windowBig As Boolean
158 +
159 + Dim responseNumber As Integer
160 +
161   Private Sub Command1_Click()
162  
163 <    ' Use the first winsock control to send
128 <    ' a UDP packet.
129 <    Winsock1.RemoteHost = Text3.Text
130 <    Winsock1.RemotePort = Text2.Text
131 <    Winsock1.SendData Text1.Text
163 >    ' Toggle visibility of the debug output.
164  
165 +    If windowBig Then
166 +        Form1.Height = 1500
167 +        windowBig = False
168 +    Else
169 +        Form1.Height = 4350
170 +        windowBig = True
171 +    End If
172 +
173   End Sub
174  
175 < Private Sub Command2_Click()
175 > Private Sub Form_Load()
176      
177 <    ' establish a TCP connection to a machine
178 <    Winsock2.Close
179 <    Winsock2.Connect Text3.Text, Text2.Text
177 >    If App.PrevInstance Then
178 >        x = MsgBox("There is already an i-scream Winhost running on this machine.", 48, "i-scream host already running")
179 >        End
180 >    End If
181 >    
182 >    protocolVersion = "1.1"
183 >    
184 >    Status.Caption = "Loading"
185 >    Form1.Caption = "i-scream Winhost " & protocolVersion
186 >    
187 >    CUpTime.Init
188 >    
189 >    If CUpTime.isWin9x Then
190 >        x = MsgBox("Sorry, the i-scream host can only be used to monitor servers (i.e. not Win9x)", 48, "Not a server")
191 >        End
192 >    End If
193 >    
194 >    windowBig = False
195 >    
196 >    ''''TEMP
197 >    'filterManagerHostname = "killigrew.ukc.ac.uk"
198 >    'filterManagerTCPPort = 4567
199 >    ''''' END TEMP
200 >    
201 >    'GoTo skip
202 >    On Error GoTo iniError
203 >    Dim buf As String * 256
204 >    Dim length As Long
205 >    length = GetPrivateProfileString("i-scream Winhost", "FilterManager", "<no value>", buf, Len(buf), App.Path & "/winhost.ini")
206 >    filterManagerHostname = Left$(buf, length)
207 >    length = GetPrivateProfileInt("i-scream Winhost", "FilterManagerPort", 0, App.Path & "/winhost.ini")
208 >    filterManagerTCPPort = length
209 >    If filterManagerHostname = "" Then
210 >        GoTo iniError
211 >    End If
212 >    On Error GoTo 0
213 > skip:
214  
215 +    Status.Caption = "Connecting to Filter Manager " & filterManagerHostname & ":" & filterManagerTCPPort
216 +    Reconfigure_Click
217 +    
218 +    SystemTray.Icon = Val(Form1.Icon)
219 +    SystemTray.Action = 0
220 +    
221 +    
222 +    Exit Sub
223 +    
224 + iniError:
225 +    x = MsgBox("The i-scream Winhost could not read the correct settings from the winhost.ini file.  Please correct these and try again.  " & Err.Description, 48, "Configuration not found")
226 +    End
227 +    
228   End Sub
229  
230 < Private Sub Command3_Click()
231 <    x = MsgBox("not implemented..")
230 > Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
231 >    x = MsgBox("Are you sure you want to shut down the Winhost?  This will stop your computer sending information to the i-scream Central Monitoring System.", vbYesNo, "i-scream Winhost")
232 >    If x = 7 Then
233 >        Cancel = True
234 >    Else
235 >        SystemTray.Action = 2
236 >    End If
237 >
238   End Sub
239  
240 < Private Sub Winsock2_Connect()
241 <      
242 <   responseNumber = 0
240 > Private Sub Hide_Click()
241 >    Form1.Visible = False
242 >    SystemTray.Icon = Val(Form1.Icon)
243 > End Sub
244 >
245 > Private Sub Reconfigure_Click()
246 >    ' establish a TCP connection to a filtermanager
247 >    connected = False
248 >    TCPSock.Close
249 >    TCPSock.Connect filterManagerHostname, filterManagerTCPPort
250 > End Sub
251 >
252 >
253 >
254 > Private Sub SystemTray_MouseDblClk(ByVal Button As Integer)
255 >
256 >    Form1.Visible = True
257 >    Form1.SetFocus
258 >
259 > End Sub
260 >
261 > Private Sub TCPSock_Connect()
262 >    
263 >    responseNumber = 0
264    
265 <   ' As soon as we are connected to the server, send this.
266 <   Winsock2.SendData "STARTCONFIG" & vbCrLf
265 >    ' Send something as soon as we connect to the server.
266 >    If connected = False Then
267 >        ' contact the FilterManager
268 >        TCPSock.SendData "STARTCONFIG" & vbCrLf
269 >    Else
270 >       ' Contact the Filter
271 >       TCPSock.SendData "HEARTBEAT" & vbCrLf
272 >    End If
273    
274   End Sub
275  
276 < Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
276 > Private Sub TCPSock_DataArrival(ByVal bytesTotal As Long)
277      
278      responseNumber = responseNumber + 1
279      
280      ' Get the line from the server.
281 <    Winsock2.GetData response, vbString, bytesTotal
281 >    TCPSock.GetData response, vbString, bytesTotal
282      
283      ' Remove linefeeds and returns from the line.
284      response = Replace(response, Chr(13), "")
285      response = Replace(response, Chr(10), "")
286 <    Text4.Text = Text4.Text & vbCrLf & response
286 >    'Text4.Text = Text4.Text & vbCrLf & response
287      
288 <    ' Decide what to send back to the server.
289 <    Select Case responseNumber
290 <        Case 1:
291 <            Winsock2.SendData "LASTMODIFIED" & vbCrLf
292 <        Case 2:
293 <            Winsock2.SendData "FILELIST" & vbCrLf
294 <        Case 3:
295 <            Winsock2.SendData "UDPUpdateTime" & vbCrLf
296 <        Case 4:
297 <            Winsock2.SendData "TCPUpdateTime" & vbCrLf
298 <        Case 5:
299 <            Winsock2.SendData "ENDCONFIG" & vbCrLf
300 <        Case 6:
301 <            Winsock2.SendData "FILTER" & vbCrLf
302 <        Case 7:
303 <            Winsock2.SendData "END" & vbCrLf
304 <        Case 8:
305 <            Winsock2.Close
306 <            Text4.Text = Text4.Text & vbCrLf & "  <closed>"
307 <    End Select
288 >    If connected = False Then
289 >        ' Perform TCP configuration (1.1)
290 >        On Error GoTo configError
291 >        Select Case responseNumber
292 >            Case 1:
293 >                If Not response = "OK" Then GoTo configError
294 >                TCPSock.SendData "LASTMODIFIED" & vbCrLf
295 >                Text1.Text = "Requesting configuration from FilterManager:- " & vbCrLf
296 >                Text1.Text = Text1.Text & response & vbCrLf
297 >            Case 2:
298 >                If response = "ERROR" Then GoTo configError
299 >                lastModified = response
300 >                Text1.Text = Text1.Text & response & vbCrLf
301 >                TCPSock.SendData "FILELIST" & vbCrLf
302 >            ''' Uncomment this for new protocol release.
303 >            'Case 2a:
304 >                'If response = "ERROR" Then GoTo configError
305 >                'fileList = response
306 >                'Text1.Text = Text1.Text & response & vbCrLf
307 >                'TCPSock.SendData "FQDN" & vbCrLf
308 >            Case 3:
309 >                If response = "ERROR" Then GoTo configError
310 >                fileList = response
311 >                Text1.Text = Text1.Text & response & vbCrLf
312 >                ' REMOVE above line, uncomment next
313 >                'machineName = response
314 >                TCPSock.SendData "UDPUpdateTime" & vbCrLf
315 >            Case 4:
316 >                If response = "ERROR" Then GoTo configError
317 >                UDPUpdateTime = response
318 >                Text1.Text = Text1.Text & response & vbCrLf
319 >                TCPSock.SendData "TCPUpdateTime" & vbCrLf
320 >            Case 5:
321 >                If response = "ERROR" Then GoTo configError
322 >                TCPUpdateTime = response
323 >                Text1.Text = Text1.Text & response & vbCrLf
324 >                TCPSock.SendData "ENDCONFIG" & vbCrLf
325 >            Case 6:
326 >                If Not response = "OK" Then GoTo configError
327 >                Text1.Text = Text1.Text & response & vbCrLf
328 >                TCPSock.SendData "FILTER" & vbCrLf
329 >            Case 7:
330 >                Text1.Text = Text1.Text & response & vbCrLf
331 >                'we got a filter list here.
332 >                readTo = 0
333 >                ' get hostname
334 >                readTo = InStr(1, response, ";", vbBinaryCompare)
335 >                filterHostname = Mid(response, 1, readTo - 1)
336 >                response = Mid(response, readTo + 1, Len(response))
337 >                ' get UDP Port number
338 >                readTo = InStr(1, response, ";")
339 >                filterUDPPort = Mid(response, 1, readTo - 1)
340 >                response = Mid(response, readTo + 1, Len(response))
341 >                ' get TCP Port number
342 >                filterTCPPort = response
343 >                TCPSock.SendData "END" & vbCrLf
344 >            Case 8:
345 >                If Not response = "OK" Then GoTo configError
346 >                connected = True
347 >                responseNumber = 0
348 >                TCPSock.Close
349 >                Text1.Text = Text1.Text & response & vbCrLf
350 >                'Text4.Text = Text4.Text & vbCrLf & "  <closed>"
351 >                Status.Caption = "Configuration successful"
352 >                Label3.Caption = UDPUpdateTime
353 >                Label4.Caption = TCPUpdateTime
354 >                Timer1.Interval = 1000
355 >        End Select
356 >    Else
357 >        ' Perform a heartbeat (1.1)
358 >        On Error GoTo heartbeatError
359 >        Select Case responseNumber
360 >            Case 1:
361 >                If Not response = "OK" Then GoTo heartbeatError
362 >                Text1.Text = "Performing heartbeat: -" & vbCrLf
363 >                Text1.Text = Text1.Text & response & vbCrLf
364 >                TCPSock.SendData "CONFIG" & vbCrLf
365 >            Case 2:
366 >                If Not response = "OK" Then GoTo heartbeatError
367 >                Text1.Text = Text1.Text & response & vbCrLf
368 >                TCPSock.SendData fileList & vbCrLf
369 >            Case 3:
370 >                If Not response = "OK" Then GoTo heartbeatError
371 >                Text1.Text = Text1.Text & response & vbCrLf
372 >                TCPSock.SendData lastModified & vbCrLf
373 >            Case 4:
374 >                If Not response = "OK" Then GoTo heartbeatError
375 >                Text1.Text = Text1.Text & response & vbCrLf
376 >                TCPSock.SendData "ENDHEARTBEAT" & vbCrLf
377 >            Case 5:
378 >                If Not response = "OK" Then GoTo heartbeatError
379 >                Text1.Text = Text1.Text & response & vbCrLf
380 >                TCPSock.Close
381 >                Status.Caption = "Heartbeat sent successfully."
382 >        End Select
383      
384 +    End If
385 +    
386 +    
387 +    Exit Sub
388 +    
389 + configError:
390 +    Status.Caption = "FAILED to get configuration"
391 +    Exit Sub
392 + heartbeatError:
393 +    Status.Caption = "Heatbeat FAILED"
394 +    Exit Sub
395   End Sub
396 +
397 + Private Sub Timer1_Timer()
398 +
399 +    Label3.Caption = Label3.Caption - 1
400 +    Label4.Caption = Label4.Caption - 1
401 +    
402 +    Status.Caption = ""
403 +    
404 +    If Label3.Caption < 1 Then
405 +        
406 +        ' prepare the contents of the XML packet.
407 +        seqNo = seqNo + 1
408 +        
409 +        ' Comment this line in the next protocol
410 +        machineName = TCPSock.LocalHostName
411 +        
412 +        LocalIP = TCPSock.LocalIP
413 +        packetDate = Date2Num()
414 +        
415 +        
416 +        Dim verinfo As OSVERSIONINFO
417 +        verinfo.dwOSVersionInfoSize = Len(verinfo)
418 +        ret% = GetVersionEx(verinfo)
419 +        If ret% = 0 Then
420 +            MsgBox "Error getting Windows version Information"
421 +            End
422 +        End If
423 +          
424 +        osName = GetVersion()
425 +        osVersionMajor = verinfo.dwMajorVersion
426 +        osVersionMinor = verinfo.dwMinorVersion
427 +        osBuild = verinfo.dwBuildNumber
428 +        
429 +        Dim sysinfo As SYSTEM_INFO
430 +        GetSystemInfo sysinfo
431 +        Select Case sysinfo.dwProcessorType
432 +            Case PROCESSOR_INTEL_386
433 +                processorType = "Intel 386"
434 +            Case PROCESSOR_INTEL_486
435 +                processorType = "Intel 486"
436 +            Case PROCESSOR_INTEL_PENTIUM
437 +                processorType = "Intel Pentium variant"
438 +            Case PROCESSOR_MIPS_R4000
439 +                processorType = "MIPS R4000"
440 +            Case PROCESSOR_ALPHA_21064
441 +                processorType = "DEC Alpha 21064"
442 +            Case Else
443 +                processorType = "(unknown)"
444 +        End Select
445 +        
446 +        Dim memsts As MEMORYSTATUS
447 +        Dim memory&
448 +        GlobalMemoryStatus memsts
449 +        memory& = memsts.dwTotalPhys
450 +        memTotal = memory& \ 1024
451 +        memory& = memsts.dwAvailPhys
452 +        memFree = memory& \ 1024
453 +        memory& = memsts.dwTotalVirtual
454 +        swapTotal = memory& \ 1024
455 +        memory& = memsts.dwAvailVirtual
456 +        swapFree = memory& \ 1024
457 +        
458 +        uptime = CUpTime.MilliSecs \ 1000
459 +        
460 +        CUpTime.Capture
461 +        cpu_time = CUpTime.CPUTime
462 +        percent_idle = CUpTime.PercentIdle
463 +        
464 +        ' build the contents of the XML packet
465 +        xml = "<packet seq_no=""" & seqNo & """ machine_name=""" & machineName & """ date=""" & packetDate & """ type=""data"" ip=""" & LocalIP & """>" & _
466 +              "<os>" & _
467 +                "<name>" & osName & "</name>" & _
468 +                "<version>" & osVersionMajor & "</version>" & _
469 +                "<release>" & osBuild & "</release>" & _
470 +                "<platform>" & osName & "</platform>" & _
471 +                "<minor_version>" & osVersionMinor & "</minor_version>" & _
472 +                "<processor>" & processorType & "</processor>" & _
473 +                "<uptime>" & uptime & "</uptime>" & _
474 +              "</os>" & _
475 +              "<cpu><idle>" & percent_idle & "</idle><user>" & cpu_time & "</user></cpu>" & _
476 +              "<memory><total>" & memTotal & "</total><free>" & memFree & "</free></memory>" & _
477 +              "<swap><total>" & swapTotal & "</total><free>" & swapFree & "</free></swap>" & _
478 +              "</packet>"
479 +        Text1.Text = "Last packet contained: -" & vbCrLf & xml
480 +
481 +        ' Use the first winsock control to send a UDP packet.
482 +        UDPSock.RemoteHost = filterHostname
483 +        UDPSock.RemotePort = filterUDPPort
484 +        UDPSock.SendData xml
485 +        Status.Caption = "UDP packet sent"
486 +        Label3.Caption = UDPUpdateTime
487 +    End If
488 +    
489 +    If Label4.Caption < 1 Then
490 +        ' establish a TCP connection to a filter
491 +        TCPSock.Close
492 +        TCPSock.Connect filterHostname, filterTCPPort
493 +        Label4.Caption = TCPUpdateTime
494 +    End If
495 +
496 + End Sub
497 +
498 + Function Date2Num() As Long
499 +    Dim x As Long
500 +    x = DateDiff("s", "1-1-1970", Now)
501 +    Date2Num = x
502 + End Function

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines