home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Beijing Paradise BBS Backup
/
PARADISE.ISO
/
software
/
BBSDOORW
/
DND29C4.ZIP
/
SOURCE.ZIP
/
DNDUTIL.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-01-07
|
10KB
|
397 lines
Rem dndutil.bas v2.9c
Rem $Include: 'dndbbs.inc'
Rem Purpose: Utility program to be shelled to or called from DOS to
Rem create bulletin files for your main BBS using dndbbs as a door.
On Error Goto 10002
Select Case Command$
Case "/L"
TempA=False
Case "/P"
TempA=True
Case Else
Print "DNDUTIL Usage:"
Print " DNDUTIL (option)"
Print " where option is:"
Print " /L makes report files, or"
Print " /P makes & prints reports."
End
End Select
Call Read.Config
If Data.Error Then
Strng="Error reading "+FileName+". Writing configure file."
Print Strng
Call Write.Config
Call Read.Config
If Data.Error Then
Strng="Error writing "+FileName+". Aborting program."
Print Strng
End
Endif
Endif
Call Top.Ten
Call User.List
Call Last.User
Strng="Bulletin files created."
Print Strng
10001
End
10002
Strng="Error in dndutil. Quitting."
Print Strng
Resume 10001
Sub Read.Config
On Local Error Goto 10004
DND.Path=Environ$("DNDBBS")
If DND.Path<>Nul Then
If Right$(DND.Path,1)<>"\" Then
DND.Path=DND.Path+"\"
Endif
Endif
Restore Config.Array.Data
For Temp=1 To 8
Read Race(Temp)
Next
FileName="dndutil.cfg"
Close
Data.Error=False
Open DND.Path+FileName For Input Shared As #1
Line Input #1,TempX$
Line Input #1,TempX$
Line Input #1,TempA$ ' User.Dat file (input)
Line Input #1,TempX$
Line Input #1,TempB$ ' Top ten rank bulletin file (output)
Line Input #1,TempX$
Line Input #1,TempC$ ' User list bulletin file (output)
Line Input #1,TempX$
Line Input #1,TempD$ ' Lastuser.Dat file (input)
Line Input #1,TempX$
Line Input #1,TempX$ ' Last user bulletin file (output)
Line Input #1,TempZ$
10003
Exit Sub
10004
Data.Error=True
Resume 10003
End Sub
Sub Write.Config
On Local Error Goto 10006
Close
Data.Error=False
Restore Config.Data
Open DND.Path+FileName For Output Shared As #1
For Temp=1 To 12
Read Temp$
Print #1,Temp$
Next
10005
Exit Sub
10006
Data.Error=True
Resume 10005
End Sub
Sub Top.Ten
On Local Error Goto 10015
Close
10007
Data.Error=False
Open TempA$ For Random Shared As #1 Len=Len(UserRecord)
Open TempB$ For Output Shared As #2
10008
If Data.Error Then
Strng="Error opening "+TempB$+". Edit DNDUTIL.CFG."
Print Strng
End
Endif
Print "Writing Top Ten report."
TempX=Lof(1)/Len(UserRecord)
Redim Temp.Array1(1 To TempX) As Integer,_
Temp.ArrayZ(1 To TempX) As Double
Strng="DNDBBS V"+Version$+" Top Ten Player Rankings For "+_
Left$(FNclock$,13)+"."
Print #2,Strng
Strng=Nul
Print #2,Strng
TempZ=False
For Temp.User.Index=1 To TempX
Get 1,Temp.User.Index,UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
If (UserRecord.Flags And Locked.User)=False Then
If Left$(Strng,9)<>Deleted$ Then
If UserRecord.Level>1 Then
TempZ=TempZ+1
Temp.Array1(TempZ)=Temp.User.Index
10009 TempA#=UserRecord.PlayersKilled*UserRecord.Level*2+_
UserRecord.MonstersKilled*UserRecord.Level
10010 Temp.ArrayZ(TempZ)=TempA#
Endif
Endif
Endif
Next
TempQ=4
While TempQ<=TempZ
TempQ=TempQ*2
Wend
TempQ=Int((TempQ-1)/2)
While TempQ>False
For Var=1 To TempZ-TempQ
VarX=Var
While VarX>False
If Temp.ArrayZ(VarX)<Temp.ArrayZ(VarX+TempQ) Then
Swap Temp.Array1(VarX),Temp.Array1(VarX+TempQ)
Swap Temp.ArrayZ(VarX),Temp.ArrayZ(VarX+TempQ)
VarX=VarX-TempQ
Else
VarX=False
Endif
Wend
Next
TempQ=Int(TempQ/2)
Wend
If TempZ>10 Then
TempZ=10
Endif
Strng="Username Level Classname Ranking"
Print #2,Strng
Strng=String$(64,"-")
Print #2,Strng
TempX=False
For Temp1=1 To TempZ
Get 1,Temp.Array1(Temp1),UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Lcase$(Strng)
Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
If UserRecord.Level>32000 Then
Strng=Strng+"Ghod "
Else
Strng=Strng+Str$(UserRecord.Level)
Strng=Strng+Space$(6-Len(Str$(UserRecord.Level)))
Endif
Out2=UserRecord.ClassName
Call Decrypt(Out2)
Strng=Strng+Out2
TempX=True
Strng=Strng+Str$(Temp.ArrayZ(Temp1))
Print #2,Strng
Next
If TempX=False Then
Strng="No users have top scores."
Print #2,Strng
Endif
Close
If TempA Then
Open TempB$ For Input Shared As #1
Do Until Eof(1)
Line Input #1,Strng
Lprint Strng
Loop
Lprint Chr$(12);
Endif
10014
Exit Sub
10015
If Erl=10007 Then
Data.Error=True
Resume 10008
Endif
If Erl=10009 Then
Resume 10010
Endif
Resume 10014
End Sub
Sub User.List
On Local Error Goto 10019
Close
10016
Data.Error=False
Open TempA$ For Random Shared As #1 Len=Len(UserRecord)
Open TempC$ For Output Shared As #2
10017
If Data.Error Then
Strng="Error opening "+TempC$+". Edit DNDUTIL.CFG."
Print Strng
End
Endif
Print "Writing User List report."
Strng="DNDBBS V"+Version$+" User List For "+Left$(FNclock$,13)+"."
Print #2,Strng
Strng=Nul
Print #2,Strng
Strng="Number User Name Class Name"
Strng=Strng+" Race Level"
Print #2,Strng
Strng=String$(73,"-")
Print #2,Strng
For Temp.User.Index=1 To Lof(1)/Len(UserRecord)
Get 1,Temp.User.Index,UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
If Left$(Strng,9)<>Deleted$ Then
If (UserRecord.Flags And Locked.User)=False Then
Strng=Mid$(Str$(Temp.User.Index),2)+"."
Strng=Strng+Space$(7-Len(Strng))
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Strng=Strng+Out2+" "
Out2=UserRecord.ClassName
Call Decrypt(Out2)
Strng=Strng+Out2+" "
If UserRecord.Race<1 Then
UserRecord.Race=1
Endif
Out2=Race(UserRecord.Race)
Out2=Rtrim$(Out2)
Out2=Out2+Space$(8-Len(Out2))
Strng=Strng+Out2
If UserRecord.Level<=False Then
Out2=" -dead-"
Else
Out2=Str$(UserRecord.Level)
Endif
Out2=Out2+Space$(7-Len(Out2))
If UserRecord.ClassType>8 Then
Out2=Out2+"*"
Endif
Strng=Strng+Out2
Print #2,Strng
Endif
Endif
Next
Close
If TempA Then
Open TempC$ For Input Shared As #1
Do Until Eof(1)
Line Input #1,Strng
Lprint Strng
Loop
Lprint Chr$(12);
Endif
10018
Exit Sub
10019
If Erl=10016 Then
Data.Error=True
Resume 10017
Endif
Resume 10018
End Sub
Sub Last.User
On Local Error Goto 10024
Close
10021
Data.Error=False
Open TempD$ For Input Shared As #1
Open TempX$ For Output Shared As #2
10022
If Data.Error Then
Strng="Error opening "+TempD$+". Edit DNDUTIL.CFG."
Print Strng
End
Endif
Print "Writing Last User report."
Strng="DNDBBS V"+Version$+" Last User For "+Left$(FNclock$,13)+"."
Print #2,Strng
Strng=Nul
Print #2,Strng
Strng="# Username Room"
Strng=Strng+" Timeon Timeoff Total Score"
Print #2,Strng
Strng=String$(70,"-")
Print #2,Strng
Redim Temp.ArrayS(1 To 5) As String
Temp1=False
Do While Not Eof(1)
Line Input #1,TempZ$
Temp1=Temp1+1
If Temp1>5 Then
Temp1=5
For Temp2=1 To 4
Temp.ArrayS(Temp2)=Temp.ArrayS(Temp2+1)
Next
Endif
Temp.ArrayS(Temp1)=TempZ$
Loop
If Temp1>5 Then
Temp1=5
Endif
For Temp2=1 To Temp1
Strng=Mid$(Str$(Temp2),2)+" "+Temp.ArrayS(Temp2)
Print #2,Strng
Next
Close
If TempA Then
Open TempX$ For Input Shared As #1
Do Until Eof(1)
Line Input #1,Strng
Lprint Strng
Loop
Lprint Chr$(12);
Endif
10023
Exit Sub
10024
If Erl=10021 Then
Data.Error=True
Resume 10022
Endif
Resume 10023
End Sub
Sub Decrypt(Var$)
On Local Error Goto 10042
Var1$=Nul
For Var=1 To Len(Var$) Step 2
Var1=Cvi(Mid$(Var$,Var,2))
Var2=Var1\100
VarA=Var1-Var2*100
Var1=Var2
VarA=VarA+32
Var2=Var1\100
VarB=Var1-Var2*100
VarB=VarB+32
If Var2=0 Then
If ((VarA+VarB)/2)=((VarA+VarB)\2) Then
Var$=Nul
Exit Sub
Endif
Endif
If Var2=1 Then
If ((VarA+VarB)/2)<>((VarA+VarB)\2) Then
Var$=Nul
Exit Sub
Endif
Endif
Var1$=Var1$+Chr$(VarB)+Chr$(VarA)
Next
Var$=Var1$
10041
Exit Sub
10042
Resume 10041
End Sub
Config.Data:
Data "'Editable configure file for dndutil:"
Data "'Datapath\filename for users.dat file(input)"
Data "\dnd\data\users.dat"
Data "'Datapath\filename for user list file(output)"
Data "\dnd\userlist.txt"
Data "'Datapath\filename for top ten file(output)"
Data "\dnd\ranklist.txt"
Data "'Datapath\filename for lastuser.dat file(input)"
Data "\dnd\data\lastuser.dat"
Data "'Datapath\filename for last five users file(output)"
Data "\dnd\lastlist.txt"
Data "'End of configure file."
Config.Array.Data:
Data "Human","Elf","Gnome","Dwarf","Halfling","Half-elf","Half-orc","Ogre"