Metropoli BBS
VIEWER: transcript.asp MODE: TEXT (ASCII)
<%@ LANGUAGE="VBSCRIPT"%>

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
</HEAD>
<BODY>

<!-- Insert HTML here -->

<%
'Option Explicit
Public aUsers(), aColors(), iNumUsers, iSize
Dim fs, fd, fc, f, a
Dim strTranscriptPath, strChannelName, strChannelNameEncoded, strFileName
Dim strOneLine, strName
Dim iColor, nLinesDisplayed, bRef

Dim req  'Channel name as a parameter
Dim pageno, i 'pages are split into 100 line segments
Dim FileNo, NumFiles, j


'-- Localizeable Static Strings --
L_SelectAChannel_StaticText		= "Select a Channel"
L_PreviousFile_StaticText		= "Previous File"
L_PreviousPage_StaticText		= "Previous Page"
L_Page_StaticText				= "Page"
L_NextPage_StaticText			= "Next Page"
L_NextFile_StaticText			= "Next File"


'-- Localizeable Strings --
L_START_Text					= "[START  ]"			
L_STOP_Text						= "[STOP   ]"			
L_MEMBER_Text					= "[MEMBER ]"			
L_MESSAGE_Text					= "[MESSAGE]"			
L_ENTERS_Text					= "[ENTERS ]"			
L_LEAVES_Text					= "[LEAVES ]"			
L_ACTION_Text					= "[ACTION ]"			
L_TOPIC_Text					= "[TOPIC  ]"			
L_ChannelName_Text				= "Channel Name"



Const LinesPerPage = 100
Const HeaderOffset = 16 '# of chars until [XXXXXXXXX] tags appear
Const TagLength    =  9	'# of chars between []'s
Const DataOffset   = 25 'HeaderOffset + TagLength

IPMask = "xxx.xxx.xxx.xxx"

Redim aUsers(200)
Redim aColors(200)
Redim aRefs(200)
iSize = 200
iNumUsers = 0

strTranscriptPath = Server.MapPath(".")
req = request.querystring("CHNL")
If req = "" Then
	Response.Write "<P><B>" + L_SelectAChannel_StaticText + "</B></P>"
Else	

	FileNo = request.querystring("FILENO")
	If FileNo = "" Then
		FileNo = 1
	Else	
		FileNo = CInt(FileNo)
	End if

	pageno = request.querystring("PAGENO")
	If pageno = "" Then
		pageno = 1
	Else	
		pageno = CInt(pageno)
	End if

	strChannelName = req
	strChannelNameEncoded = Server.URLEncode(req)

	Set fs = CreateObject("Scripting.FileSystemObject")

	'get Channel Folder
	Set fd = fs.GetFolder(strTranscriptPath + "\" + strChannelName)

	'get List of all files in the folder
	set fc = fd.Files

	'iterate through all files until desired # - cant use item to get file directly		
	j = 1
	NumFiles = fc.Count
	For Each f in fc   
		If j = FileNo Then			

			strFileName = f.name
			

			Set a = fs.OpenTextFile( strTranscriptPath + "\" + strChannelName + "\" + strFileName, 1, False, 0)

			'read the channel name and display it
			strOneLine = a.ReadLine    
			response.write "<P><B>"
			response.write L_ChannelName_Text + ": " + strOneLine
			response.write "</B></P>" + vbCrLf

			'start reading at current page
			for i = 1 to (pageno - 1) * LinesPerPage
				'a.skipline
				strOneLine = a.ReadLine    
				If MID(strOneLine, HeaderOffset, TagLength) = "[MEMBER ]" Then
					
					strName = GetUsername(strOneLine)
					iUser = FindUser(strName)
					If iUser < 1 Then
						iUser = NewUser(strName)
					End If
					iColor = aColors(iUser)
				End If
			next

			i = 1
			Do While (a.AtEndOfStream <> True) and (i <= LinesPerPage)

				strOneLine = a.ReadLine    
				response.write "<P>"			
				If MID(strOneLine, HeaderOffset, TagLength) = "[MESSAGE]" Then
					strName = GetUserName(strOneLine)
					iUser = FindUser(strName)
					iColor = aColors(iUser)
					response.write "<Font Color = ""#" & Hex(iColor) & """>"
					response.write MID(strOneLine, DataOffset)
					response.write "</Font>"
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[MEMBER ]" Then
					strName = GetUsername(strOneLine)
					iUser = FindUser(strName)
					If iUser < 1 Then
						iUser = NewUser(strName)
					End If
					iColor = aColors(iUser)
					response.write "<Font Color = ""#" & Hex(iColor) & """>"
					response.write L_MEMBER_Text + MaskIp(MID(strOneLine, DataOffset))
					response.write "</Font>"
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[ENTERS ]" Then
					response.write L_ENTERS_Text + MID(strOneLine, DataOffset)
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[LEAVES ]" Then
					response.write L_LEAVES_Text + MID(strOneLine, DataOffset)
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[START  ]" Then
					response.write L_START_Text + MID(strOneLine, DataOffset)
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[TOPIC  ]" Then
					response.write L_TOPIC_Text + MID(strOneLine, DataOffset)
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[STOP   ]" Then
					response.write L_STOP_Text + MID(strOneLine, DataOffset)				
				ElseIf MID(strOneLine, HeaderOffset, TagLength) = "[ACTION ]" Then
					response.write L_ACTION_Text + MID(strOneLine, DataOffset)
				Else
					response.write MID(strOneLine, HeaderOffset)
				End If
				
				response.write "</P>" + vbCrlf
			
				i = i + 1
			Loop
			

			a.Close

			'Create Navigation links on bottom of page

			'Create table to format columns neatly

			response.write "<TABLE WIDTH=80% COLS=5>" + vbCrLf
			response.write "<TR>" + vbCrLf

			response.write "<TD WIDTH=20% >" 
			If FileNo > 1 Then
				response.write "<A HREF=Transcript.asp?CHNL=" + strChannelNameEncoded + "&FILENO=" + CSTR(FileNo - 1) + "&PAGENO=1> Previous File</A>"
			Else
				response.write L_PreviousFile_StaticText
			End If
			response.write "</TD>" + vbCrLf

			response.write "<TD WIDTH=20% >" 
			If pageno > 1 Then
				response.write " <A HREF=Transcript.asp?CHNL=" + strChannelNameEncoded + "&FILENO=" + CSTR(FileNo) + "&PAGENO=" + CSTR(PAGENO - 1) + "> Previous Page</A>"
			Else
				response.write " " + L_PreviousPage_StaticText
			End If
			response.write "</TD>" + vbCrLf

			response.write "<TD WIDTH=20% >" 
			response.write "<B><A HREF=Transcript.asp?CHNL=" + strChannelNameEncoded + "&FILENO=" + CSTR(FileNo) + "&PAGENO=" + CSTR(PAGENO) + "> " + L_Page_StaticText + " " + CStr(PageNo) + "</A></B>"
			response.write "</TD>" + vbCrLf

			response.write "<TD WIDTH=20% >" 
			If i >= LinesPerPage Then
				response.write " <A HREF=Transcript.asp?CHNL=" + strChannelNameEncoded + "&FILENO=" + CSTR(FileNo) + "&PAGENO=" + CSTR(PAGENO + 1) + "> " + L_NextPage_StaticText + "</A>"
			Else
				response.write " " + L_NextPage_StaticText
			End If
			response.write "</TD>" + vbCrLf

			response.write "<TD WIDTH=20% >" 
			If j < NumFiles Then
				response.write " <A HREF=Transcript.asp?CHNL=" + strChannelNameEncoded + "&FILENO=" + CSTR(FileNo + 1) + "&PAGENO=1> " + L_NextFile_StaticText + "</A>"
			Else
				response.write " " + L_NextFile_StaticText
			End If
			response.write "</TD>" + vbCrLf
			response.write "</TR>" + vbCrLf
			response.write "</TABLE>" + vbCrLf

		End If
		j = j + 1
	Next

End If

%>

</BODY>
</HTML>

<%

Function  GetUserName(strOneLine)
	Dim I
	I = DataOffset
	Do While (mid(strOneLine, I, 1) <> " " AND i < Len(strOneLine))
		I = I + 1
	Loop
	GetUserName = mid(strOneLine, DataOffset, I - DataOffset)
End Function

Function FindUser(strUser) 
     Dim I
	 
	 For I = 1 to iNumUsers
		If Trim(strUser) = Trim(aUsers(I)) Then
			FindUser = I			
			Exit Function
		End If
	Next
	FindUser = -1
End Function

Function NewUser(strUser) 
	If iNumUsers >= iSize Then
		iSize = iSize + 200
		Redim preserve aUsers(iSize)
		Redim preserve aColors(iSize)
	End If
	iNumUsers = iNumUsers + 1
	aColors(iNumUsers) = CLng(Rnd * 16000000)
	aUsers(iNumUsers) = strUser
	NewUser = iNumUsers	
End Function

Function MaskIp(strUserInfo)
	Dim I, StartIp, EndIp

	StartIp = 0
	For I = 1 to Len(strUserInfo)
		If Mid(strUserInfo, I, 1) = "@" Then
			StartIp = I + 1
			Exit For
		End If
	Next

	EndIp = 0
	For I = StartIp to Len(strUserInfo) - 4
		If Mid(strUserInfo, I, 4) = "Real" Then
			EndIp = I - 2
			Exit For
		End If
	Next

	strMasked = Mid(strUserInfo, 1, StartIp - 1)
	For I = StartIp To EndIp
		If Mid(strUserInfo, I, 1) = "." Then
			strMasked = strMasked + "."
		Else
			strMasked = strMasked + "x"
		End If
	Next

	strMasked = strMasked + Mid(strUserInfo, EndIp + 1)
	MaskIp = strMasked
End Function

%>
[ RETURN TO DIRECTORY ]