home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
d
/
dnd29c4.zip
/
SOURCE.ZIP
/
DNDSUB5.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-01-07
|
32KB
|
1,226 lines
Rem dndsub5.bas v2.9c
Rem $Include: 'dndbbs.inc'
Sub Mail
On Local Error Goto 10012
Close 4, 5, 6, 7, 8, 9
Redim Temp.ArrayS(1 To 19) As String
Do
Call Mail.Status.Line
Strng=Nul
Call IO.O
Line.Length=1
No.Input.Out="Q"
Strng="Mail command(?=Help): "
Call IO.I
VarX=True
Out3=Ucase$(Out2)
If Instr("EKNR",Out3) Then
Call Select.Base(VarX)
If VarX Then
Call Open.Mail
Endif
Endif
Call IO.O
If VarX Then
Select Case Out3
Case "E"
Call Enter.Message
Case "K"
Call Kill.Message
Case "L"
Call Lock.Mailbox(True)
Case "N"
Call New.Messages
Case "R"
Call Read.Messages
Case "U"
Call Lock.Mailbox(False)
Case "Q"
Exit Do
Case "?"
Stored.Parsed.Command1=Config3(26)
Call Read.Help(False)
Case Else
Graphics.Off=False
Strng="Type ? for Help."
Call IO.O
End Select
Endif
Loop
10011
Exit Sub
10012
Resume 10011
End Sub
Sub Mail.Status.Line
On Local Error Goto 10022
Temp$=UserRecord.CodeName
Call Decrypt(Temp$)
Temp$=Rtrim$(Temp$)
Temp$=Lcase$(Temp$)
Mid$(Temp$,1,1)=Ucase$(Mid$(Temp$,1,1))
Temp$=Temp$+" > "
Get 3,User.Index,UserRecord
If UserRecord.Flags And Locked.User Then
Temp$=Temp$+"Mailbox locked"
Else
Temp$=Temp$+"Mailbox unlocked"
Endif
Temp$=Temp$+" > Last Message Read"+Str$(NewMessages.LastMessage)+"."
Temp$=Left$(Temp$,79)
Temp$=Temp$+Space$(79-Len(Temp$))
Call Local.ANSI(2,25,1)
Temp$=TempD$+Temp$
Call Display.Status.Line
10021
Exit Sub
10022
Resume 10021
End Sub
Sub Enter.Message
On Local Error Goto 10032
Do
Graphics.Off=True
Line.Length=30
Strng="Message to(Press "+Enter$+" for all)?"
Call IO.I
Message.To=Ucase$(Out2)
Temp=True
If No.Input=False Then
Temp=False
For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
Get 3,Temp.User.Index,UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Rtrim$(Strng)
Strng=Ucase$(Strng)
If Message.To=Strng Then
If User.Index<>Temp.User.Index Then
If (UserRecord.Flags And Locked.User)=False Then
Temp=True
Exit For
Endif
Endif
Endif
Next
Get 3,User.Index,UserRecord
Endif
If Temp Then
Exit Do
Endif
Strng="There is no such user."
Call IO.O
Loop
Do
Line.Length=20
Strng="Subject?"
Call IO.I
Subject=Lcase$(Out2)
If Subject<>Nul Then
Exit Do
Endif
Strng="Abort message(y/n)?"
No.Input.Out="N"
Line.Length=1
Call IO.I
If Yes Then
Exit Do
Endif
Loop
If Subject<>Nul Then
Strng="Enter message. Maximum 19 lines."
Call IO.O
Message.Length=False
Do
Strng="Press "+Enter$+" on a blank line to edit."
Call IO.O
Do
Graphics.Off=True
If Message.Length=19 Then
Strng="Message buffer full."
Call IO.O
Exit Do
Endif
Word.Wrap=True
Strng="?"
Call IO.I
If No.Input Then
Exit Do
Endif
Message.Length=Message.Length+1
Out2=Rtrim$(Out2)
Out2=Left$(Out2,79)
Temp.ArrayS(Message.Length)=Out2
Loop
Word.Wrap=False
Call Edit.Message(VarX)
If VarX=-1 Then
Strng="Continue editing."
Call IO.O
Endif
If VarX=0 Then
Exit Do
Endif
If VarX=1 Then
Call Store.Message
Exit Do
Endif
Loop
Endif
10031
Exit Sub
10032
Resume 10031
End Sub
Sub Lock.Mailbox(Var)
On Local Error Goto 10042
If Var Then
Strng="Mailbox locked."
UserRecord.Flags=UserRecord.Flags Or Locked.User
Else
Strng="Mailbox unlocked."
UserRecord.Flags=UserRecord.Flags And Not Locked.User
Endif
Put 3,User.Index,UserRecord
Call IO.O
10041
Exit Sub
10042
Resume 10041
End Sub
Sub Kill.Message
On Local Error Goto 10052
Strng="Enter message number to delete?"
Call IO.I
Temp=Val(Out2)
If Temp<1 Or Temp>Lof(14)/Len(TableRecord) Then
Strng=Range$
Call IO.O
Exit Sub
Endif
Get 14,Temp,TableRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Rtrim$(Strng)
Strng=Ucase$(Strng)
Out2=TableRecord.MessageFrom
Out2=Rtrim$(Out2)
Out2=Ucase$(Out2)
If Strng<>Out2 Then
Strng="Message"+Str$(Temp)+" is not from you."
Call IO.O
Exit Sub
Endif
If TableRecord.MessageKilled="T" Then
Strng="Message"+Str$(Temp)+" is already deleted."
Call IO.O
Exit Sub
Endif
TableRecord.MessageKilled="T"
Put 14,Temp,TableRecord
Strng="Message"+Str$(Temp)+" deleted."
Call IO.O
10051
Exit Sub
10052
Resume 10051
End Sub
Sub Read.Message(Var)
On Local Error Goto 10062
Get 14,Var,TableRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Rtrim$(Strng)
Strng=Ucase$(Strng)
If TableRecord.MessageKilled="T" Then
Graphics.Off=True
Strng="Message #"+Mid$(Str$(Var),2)+" was deleted."
Call IO.O
Exit Sub
Endif
If TableRecord.MessageKilled="F" Then
Select Case Message.Base.Number
Case 1
Var1=False
Case 2
Var1=True
Case Else
Get 10,Message.Base.Number-2,MessageBaseRecord
If MessageBaseRecord.BaseType And Private.Base Then
Var1=True
Endif
End Select
If Var1 Then
Out2=TableRecord.MessageTo
Out2=Rtrim$(Out2)
Out2=Ucase$(Out2)
If Out2=Nul Or Strng=Out2 Then
Var1=False
Endif
Endif
If Var1 Then
Strng="Message #"+Mid$(Str$(Var),2)+" is private."
Call IO.O
Endif
If Var1=False Then
Graphics.Off=True
Strng="Msg#:"+Str$(Var)+" of"+Str$(Lof(14)/Len(TableRecord))
Call IO.O
Strng="From: "+TableRecord.MessageFrom
Call IO.O
Out2=TableRecord.MessageTo
Out2=Rtrim$(Out2)
If Out2=Nul Then
Out2="ALL"
Endif
Out2=Lcase$(Out2)
Mid$(Out2,1,1)=Ucase$(Mid$(Out2,1,1))
Strng="To: "+Out2
Call IO.O
Strng="Subj: "+TableRecord.MessageSubject
Call IO.O
Strng="Time: "+TableRecord.MessageTime
Call IO.O
Allow.Break=True
For Var2=TableRecord.MessageStart To_
TableRecord.MessageStart+TableRecord.MessageLength-1
Get 16,Var2,MessageRecord
Strng=MessageRecord.Message
VarX=Instr(Strng,Chr$(1))
If VarX Then
Strng=Left$(Strng,VarX-1)
Endif
Strng=Rtrim$(Strng)
Call IO.O
If Break Then
Exit For
Endif
Next
Allow.Break=False
Call IO.O
Endif
Endif
10061
Exit Sub
10062
Resume 10061
End Sub
Sub Read.Messages
On Local Error Goto 10072
Graphics.Off=False
No.Input.Out="1"
Strng="Message number(1-"+Mid$(Str$(Lof(14)/Len(TableRecord)),2)+")?"
Call IO.I
Message.Read=Val(Out2)
If Message.Read<1 Or Message.Read>Lof(14)/Len(TableRecord) Then
Strng=Range$
Call IO.O
Exit Sub
Endif
For TempX=Message.Read To Lof(14)/Len(TableRecord)
Call Read.Message(TempX)
If TempX>NewMessages.LastMessage Then
NewMessages.LastMessage=TempX
Endif
Graphics.Off=False
Strng=More$
Line.Length=1
No.Input.Out="Y"
Call IO.I
If No Then
Exit For
Endif
Temp1=Val(Out2)
If Temp1>False Then
If Temp1>Lof(14)/Len(TableRecord) Then
Temp1=Lof(14)/Len(TableRecord)
Endif
TempX=Temp1-1
Endif
Next
Strng="End of messages."
Call IO.O
Put 15,User.Index,NewMessages
10071
Exit Sub
10072
Resume 10071
End Sub
Sub New.Messages
On Local Error Goto 10082
Get 15,User.Index,NewMessages
If NewMessages.LastMessage>=Lof(14)/Len(TableRecord) Then
Strng="No new messages."
Call IO.O
Exit Sub
Endif
For TempX=NewMessages.LastMessage+1 To Lof(14)/Len(TableRecord)
Call Read.Message(TempX)
NewMessages.LastMessage=TempX
Graphics.Off=False
Strng=More$
No.Input.Out="Y"
Call IO.I
If No Then
Exit For
Endif
Next
Put 15,User.Index,NewMessages
10081
Exit Sub
10082
Resume 10081
End Sub
Sub Select.Base(Var)
On Local Error Goto 10092
Strng="Select message base:"
Call IO.O
Graphics.Off=True
Strng=Mask$+"1: public, Type: (public)"
Call IO.O
Strng=Mask$+"2: private, Type: (private)"
Call IO.O
Temp1=2
For Temp=1 To Lof(10)/Len(MessageBaseRecord)
Get 10,Temp,MessageBaseRecord
Out2=MessageBaseRecord.BaseMessName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
If Left$(Out2,9)<>Deleted$ Then
Strng=Mask$+Mid$(Str$(Temp+2),2)+": "+Out2+", Type: "
If MessageBaseRecord.BaseType And Public.Base Then
Strng=Strng+"(public) "
Endif
If MessageBaseRecord.BaseType And Private.Base Then
Strng=Strng+"(private) "
Endif
If MessageBaseRecord.BaseType And DM.Base Then
Strng=Strng+"(DMs only) "
Endif
If MessageBaseRecord.BaseType And Sysop.Base Then
Strng=Strng+"(Sysops only) "
Endif
If MessageBaseRecord.BaseType And TownMayor.Base Then
Strng=Strng+"(Town Mayor) "
Endif
If MessageBaseRecord.BaseType And Governor.Base Then
Strng=Strng+"(Governor) "
Endif
If MessageBaseRecord.BaseType And GuildMaster.Base Then
Strng=Strng+"(Guild Master) "
Endif
Strng=Rtrim$(Strng)
Call IO.O
Temp1=Temp1+1
If Temp1>22 Then
Temp1=False
Call More.Prompt
If No Then
Exit For
Endif
Endif
Endif
Next
Graphics.Off=False
Strng="Enter message base number(1-"+_
Mid$(Str$(Lof(10)/Len(MessageBaseRecord)+2),2)+")?"
Call IO.I
Temp=Val(Out2)
If Temp<1 Or Temp>Lof(10)/Len(MessageBaseRecord)+2 Then
Strng=Range$
Call IO.O
Var=False
Exit Sub
Endif
Select Case Temp
Case 1
Message.Name="public"
Message.Base.Name=Config3(58)
Message.Base.Number=1
Var=True
Case 2
Message.Name="private"
Message.Base.Name=Config3(60)
Message.Base.Number=2
Var=True
Case Else
Get 10,Temp-2,MessageBaseRecord
Out2=MessageBaseRecord.BaseMessName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
If Left$(Out2,9)=Deleted$ Then
Strng="Deleted message base."
Call IO.O
Var=False
Exit Sub
Endif
Temp2=False
If MessageBaseRecord.BaseType And Public.Base Then
Temp2=True
Endif
If MessageBaseRecord.BaseType And Private.Base Then
Temp2=True
Endif
If MessageBaseRecord.BaseType And DM.Base Then
If Dungeon.Master Or Dungeon.Master.Assistant Or Sysop Then
Temp2=True
Endif
Endif
If MessageBaseRecord.BaseType And Sysop.Base Then
If Sysop Then
Temp2=True
Endif
Endif
If MessageBaseRecord.BaseType And TownMayor.Base Then
If UserRecord.Flags And Special.Char1 Then
Temp2=True
Endif
Endif
If MessageBaseRecord.BaseType And Governor.Base Then
If UserRecord.Flags And Special.Char2 Then
Temp2=True
Endif
Endif
If MessageBaseRecord.BaseType And GuildMaster.Base Then
If UserRecord.Flags And Special.Char3 Then
Temp2=True
Endif
Endif
If Temp2 Then
Message.Name=MessageBaseRecord.BaseMessName
Message.Base.Name=MessageBaseRecord.BaseFileName
Message.Base.Number=Temp
Var=True
Else
Strng="You can not select message base #"+Mid$(Str$(Temp),2)+"."
Call IO.O
Var=False
Endif
End Select
10091
Exit Sub
10092
Resume 10091
End Sub
Sub Edit.Message(Var)
On Local Error Goto 10102
Do
Line.Length=1
Graphics.Off=False
Strng="Edit command(?=Help): "
No.Input.Out="?"
Call IO.I
Out2=Ucase$(Out2)
Select Case Out2
Case "C"
Var=-1
Exit Do
Case "R"
Call Replace.Line
Case "E"
Call Edit.Line
Case "D"
Call Delete.Line
Case "I"
Call Insert.Lines
Case "A"
Strng="Are you sure(y/n)?"
No.Input.Out="N"
Call IO.I
If Yes Then
Var=0
Exit Do
Endif
Case "L"
Call List.Lines
Case "S"
Var=1
Exit Do
Case "?"
Stored.Parsed.Command1=Config3(27)
Call Read.Help(False)
Case Else
Strng="Type ? for Help."
Call IO.O
End Select
Loop
10101
Exit Sub
10102
Resume 10101
End Sub
Sub Store.Message
On Local Error Goto 10112
Strng="Storing message."
Call IO.O
TableRecord.MessageTime=FNclock$
Strng=UserRecord.CodeName
Call Decrypt(Strng)
TableRecord.MessageFrom=Strng
TableRecord.MessageKilled="F"
TableRecord.MessageTo=Message.To
TableRecord.MessageSubject=Subject
TableRecord.MessageLength=Message.Length+1
TableRecord.MessageStart=Lof(16)/Len(MessageRecord)+1
Put 14,Lof(14)/Len(TableRecord)+1,TableRecord
Out4=UserRecord.Classname
Call Decrypt(Out4)
Out4=Rtrim$(Out4)
Strng="Stat: "+Out4+" "
If UserRecord.Flags And Special.Char1 Then
Strng=Strng+"Town Mayor "
Endif
If UserRecord.Flags And Special.Char2 Then
Strng=Strng+"Governor "
Endif
If UserRecord.Flags And Special.Char3 Then
Strng=Strng+"Guild Master "
Endif
If UserRecord.Flags And Special.Char4 Then
Strng=Strng+"Sysop "
Endif
Strng=Left$(Strng,79)
Strng=Strng+Chr$(1)
MessageRecord.Message=Strng
TempX=Lof(16)/Len(MessageRecord)+1
Put 16,TempX,MessageRecord
For Temp=1 To Message.Length
Strng=Temp.ArrayS(Temp)
Strng=Left$(Strng,79)
Strng=Strng+Chr$(1)
MessageRecord.Message=Strng
TempX=Lof(16)/Len(MessageRecord)+1
Put 16,TempX,MessageRecord
Next
10111
Exit Sub
10112
Resume 10111
End Sub
Sub Bank
On Local Error Goto 10124
Static TempG#, Balance.Taken
If Balance.Taken=False Then
TempG#=False
For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
Get 3,Temp.User.Index,UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
10121 If Left$(Strng,9)<>Deleted$ Then
TempG#=TempG#+UserRecord.Bank
Endif
Next
10122
Balance.Taken=True
Endif
Get 3,User.Index,UserRecord
Do While Security.Guard
Temp$=UserRecord.CodeName
Call Decrypt(Temp$)
Temp$=Rtrim$(Temp$)
Temp$=Lcase$(Temp$)
Mid$(Temp$,1,1)=Ucase$(Mid$(Temp$,1,1))
Temp$=Temp$+" > "
Temp$=Temp$+"Gold:"+Str$(UserRecord.Gold)+" "
Temp$=Temp$+"Bank:"+Str$(UserRecord.Bank)+" "
Temp$=Temp$+"Loan:"+Str$(UserRecord.Borrow)
If Len(Temp$)<57 Then
Temp$=Temp$+" > Interest Rate:"+Str$(Config1(30)*100)+"%"
Endif
Temp$=Left$(Temp$,79)
Temp$=Temp$+Space$(79-Len(Temp$))
Call Local.ANSI(2,25,1)
Temp$=TempD$+Temp$
Call Display.Status.Line
Graphics.Off=False
Strng="The broker asks: What can I do for you?"
Line.Length=1
No.Input.Out="?"
Call IO.I
Select Case Ucase$(Out2)
Case "D"
If UserRecord.Gold<1 Then
Strng="You have no gold to deposit!"
Call IO.O
Else
Strng="How much(1-"+Mid$(Str$(UserRecord.Gold),2)+")?"
Call IO.I
Temp3#=Val(Out2)
If Temp3#<1 Or Temp3#>UserRecord.Gold Then
Strng="You don't have that much gold!"
Call IO.O
Else
UserRecord.Bank=UserRecord.Bank+Temp3#
UserRecord.Gold=UserRecord.Gold-Temp3#
Put 3,User.Index,UserRecord
TempG#=TempG#+Temp3#
Strng="You hand him the gold."
Call IO.O
Endif
Endif
Case "T"
If UserRecord.Bank<1 Then
Strng="You have nothing in your account to transfer!"
Call IO.O
Else
Strng="How much(1-"+Mid$(Str$(UserRecord.Bank),2)+")?"
Call IO.I
Temp3#=Val(Out2)
If Temp3#<1 Or Temp3#>UserRecord.Bank Then
Strng="You don't have that much gold in the bank!"
Call IO.O
Else
Strng="Transfer to what person?"
Call IO.I
Put 3,User.Index,UserRecord
Out2=Ucase$(Out2)
Out2=Rtrim$(Out2)
Temp1=False
For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
Get 3,Temp.User.Index,UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Rtrim$(Strng)
If Strng=Out2 Then
If User.Index<>Temp.User.Index Then
Temp1=True
Exit For
Endif
Endif
Next
If Temp1=False Then
Strng="There's nobody in my ledgers with that name!"
Call IO.O
Get 3,User.Index,UserRecord
Else
UserRecord.Bank=UserRecord.Bank+Temp3#
Put 3,Temp.User.Index,UserRecord
Get 3,User.Index,UserRecord
Strng="The broker works with his ledgers for a while."
Call IO.O
Strng=Mid$(Str$(Temp3#),2)+" transferred to his account."
Call IO.O
UserRecord.Bank=UserRecord.Bank-Temp3#
Endif
Endif
Endif
Case "W"
If UserRecord.Bank<1 Then
Strng="You have nothing to withdraw!"
Call IO.O
Else
If UserRecord.Borrow>False Then
Strng="You must pay back your loan first!"
Call IO.O
Else
Strng="How much(1-"+Mid$(Str$(UserRecord.Bank),2)+")?"
Call IO.I
Temp3#=Val(Out2)
If Temp3#<1 Or Temp3#>UserRecord.Bank Then
Strng="You don't have that much gold!"
Call IO.O
Else
UserRecord.Bank=UserRecord.Bank-Temp3#
UserRecord.Gold=UserRecord.Gold+Temp3#
Put 3,User.Index,UserRecord
TempG#=TempG#-Temp3#
If TempG#<False Then
TempG#=False
Endif
Strng="The broker hands you the gold."
Call IO.O
Endif
Endif
Endif
Case "R"
If UserRecord.Borrow>False Then
Strng="You must pay back your loan first!"
Call IO.O
Else
If TempG#=False Then
Strng="The bank is broke."
Call IO.O
Else
Strng="Are you sure(y/n)?"
Line.Length=1
No.Input.Out="N"
Call IO.I
If Yes Then
Strng="You rob the bank!"
Call IO.O
If Rnd>.5 Then
Temp3#=Int((UserRecord.Level*10)+Rnd*5000)
TempG#=TempG#-Temp3#
If TempG#<False Then
TempG#=False
Endif
Strng="You steal"+Str$(Temp3#)+" gold from the bank!"
Call IO.O
UserRecord.Gold=UserRecord.Gold+Temp3#
Put 3,User.Index,UserRecord
Else
Strng="The broker catches you!"
Call IO.O
Strng="The broker hits you for"
Out3="the broker for robbing the bank"
Temp#=Int(Rnd*UserRecord.Fatigue+UserRecord.Level*5)
If Temp#>MaxInt Then
Temp#=MaxInt
Endif
Prefix2=Nul
Temp2=Cint(Temp#)
Call Hit.Player(Temp2)
Exit Sub
Endif
Endif
Endif
Endif
Case "B"
If TempG#<1 Then
Strng="The broker informs you the bank is broke!"
Call IO.O
Else
Strng="The broker says: The bank has"+Str$(TempG#)+" gold."
Call IO.O
If TempG#>MaxInt Then
TempX=MaxInt
Else
TempX=TempG#
Endif
If UserRecord.Borrow>=MaxInt Then
Strng="The broker says: You can't borrow any more!"
Call IO.O
Else
Temp2=TempX-UserRecord.Borrow
If Temp2>TempX Then
TempX=Temp2
Endif
Strng="How much will you borrow(1-"+Mid$(Str$(TempX),2)+")?"
Call IO.I
If Val(Out2)<1 Or Val(Out2)>MaxInt Then
Strng="The broker says: You can't borrow that much!"
Call IO.O
Else
Temp2=Val(Out2)
If Temp2>TempX Then
Strng="The broker says: You can't borrow that much!"
Call IO.O
Else
Strng="The broker hands you the gold."
Call IO.O
UserRecord.Gold=UserRecord.Gold+Temp2
If UserRecord.Borrow+Temp2>MaxInt Then
UserRecord.Borrow=MaxInt
Else
UserRecord.Borrow=UserRecord.Borrow+Temp2
Endif
TempG#=TempG#-Temp2
If TempG#<False Then
TempG#=False
Endif
Endif
Endif
Endif
Endif
Case "P"
Graphics.Off=True
If UserRecord.Borrow<1 Then
Strng="You don't have any debt with the bank!"
Call IO.O
Else
If UserRecord.Bank>False Then
Strng="The broker asks: Pay back with your current bank account?"
Line.Length=1
No.Input.Out="Y"
Call IO.I
If Yes Then
If UserRecord.Borrow-UserRecord.Bank<1 Then
UserRecord.Bank=UserRecord.Bank-UserRecord.Borrow
UserRecord.Borrow=False
Strng="The broker says: Your loan is paid off!"
Call IO.O
Else
UserRecord.Borrow=UserRecord.Borrow-UserRecord.Bank
UserRecord.Bank=False
Strng="The broker says: Your balance paid part of the loan!"
Call IO.O
Endif
Endif
Endif
If UserRecord.Borrow>False Then
If UserRecord.Gold>False Then
Strng="The broker asks: Pay back with your current gold?"
Line.Length=1
No.Input.Out="Y"
Call IO.I
If Yes Then
If UserRecord.Borrow-UserRecord.Gold<1 Then
UserRecord.Gold=UserRecord.Gold-UserRecord.Borrow
TempG#=TempG#+UserRecord.Borrow
UserRecord.Borrow=False
Strng="The broker says: Your loan is paid off!"
Call IO.O
Else
UserRecord.Borrow=UserRecord.Borrow-UserRecord.Gold
TempG#=TempG#+UserRecord.Gold
UserRecord.Gold=False
Strng="The broker says: Your gold paid part of the loan!"
Call IO.O
Endif
Endif
Endif
Endif
Endif
Case "A"
Strng="He fumbles with his ledgers and says:"
Call IO.O
Graphics.Off=True
Strng="The current account interest rate is"+Str$(Config1(30)*100)+"%"
Call IO.O
Strng="The current lending interest rate is"+Str$(Config1(10)*100)+"%"
Call IO.O
Strng="The bank reports total holdings of"+Str$(TempG#)+" gold."
Call IO.O
Strng="You have"+Str$(UserRecord.Gold)+_
" gold and"+Str$(UserRecord.Bank)+" in the bank."
Call IO.O
Strng="You have borrowed"+Str$(UserRecord.Borrow)+_
" gold from the bank."
Call IO.O
Case "Q"
Put 3,User.Index,UserRecord
Exit Do
Case "?"
Stored.Parsed.Command1=Config3(46)
Call Read.Help(False)
Case Else
Strng="Type ? for Help."
Call IO.O
End Select
Loop
10123
Exit Sub
10124
If Erl=10121 Then
Resume 10122
Endif
Resume 10123
End Sub
Sub Init.Mail
On Local Error Goto 10132
Message.Base.Name=Config3(58)
Call Open.Mail
NewMessages.LastMessage=False
NewMessages.EmptyBuffer=False
Put 15,User.Index,NewMessages
Message.Base.Name=Config3(60)
Call Open.Mail
NewMessages.LastMessage=False
NewMessages.EmptyBuffer=False
Put 15,User.Index,NewMessages
For Temp3=1 To Lof(10)/Len(MessageBaseRecord)
Get 10,Temp3,MessageBaseRecord
Message.Base.Name=MessageBaseRecord.BaseFileName
Call Open.Mail
NewMessages.LastMessage=False
NewMessages.EmptyBuffer=False
Put 15,User.Index,NewMessages
Next
10131
Exit Sub
10132
Resume 10131
End Sub
Sub New.Mail
On Local Error Goto 10142
Message.Base.Name=Config3(58)
Message.Base="public"
Call Check.Mail
Message.Base.Name=Config3(60)
Message.Base="private"
Call Check.Mail
Strng="Check all message bases for new mail(y/n)?"
No.Input.Out="Y"
Call IO.I
If Yes Then
For Temp3=1 To Lof(10)/Len(MessageBaseRecord)
Get 10,Temp3,MessageBaseRecord
Message.Base.Name=MessageBaseRecord.BaseFileName
Message.Base=Rtrim$(MessageBaseRecord.BaseMessName)
Call Check.Mail
Next
Endif
10141
Exit Sub
10142
Resume 10141
End Sub
Sub Check.Mail
On Local Error Goto 10152
Call Open.Mail
Graphics.Off=True
Temp5=False
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Get 15,User.Index,NewMessages
Temp1=NewMessages.LastMessage
Temp2=Lof(14)/Len(TableRecord)
If Temp1>False And Temp1<=Temp2 Then
For Temp4=Temp1 To Temp2
Get 14,Temp4,TableRecord
If TableRecord.MessageKilled="F" Then
If TableRecord.MessageTo=Strng Then
Temp5=Temp5+1
Endif
Endif
Next
Endif
Graphics.Off=True
Strng=Lcase$(Message.Base)+" message base>"+Str$(Temp5)+" messages."
Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
Call IO.O
Graphics.Off=False
10151
Exit Sub
10152
Resume 10151
End Sub
Sub Open.Mail
On Local Error Goto 10162
Close 14, 15, 16
Message.Base.Name=Rtrim$(Message.Base.Name)
FileName=Config3(54)+Message.Base.Name+".TBL"
Open FileName For Random Shared As #14 Len=Len(TableRecord)
FileName=Config3(54)+Message.Base.Name+".NEW"
Open FileName For Random Shared As #15 Len=Len(NewMessages)
FileName=Config3(54)+Message.Base.Name+".DAT"
Open FileName For Random Shared As #16 Len=Len(MessageRecord)
Call Init.Messages
10161
Exit Sub
10162
Resume 10161
End Sub
Sub Init.Messages
On Local Error Goto 10172
Var=Lof(15)/Len(NewMessages)
If User.Index>Var Then
For Var1=Var+1 To User.Index
NewMessages.LastMessage=False
NewMessages.EmptyBuffer=False
Put 15,Var1,NewMessages
Next
Endif
10171
Exit Sub
10172
Resume 10171
End Sub
Sub Replace.Line
On Local Error Goto 10182
Strng="Line number(1-"+Mid$(Str$(Message.Length),2)+")?"
Call IO.I
Temp=Int(Val(Out2))
If Temp<1 Or Temp>Message.Length Then
Strng=Range$
Call IO.O
Exit Sub
Endif
Strng="Replacement line:"
Call IO.O
Line.Length=79
Strng="?"
Call IO.I
Out2=Rtrim$(Out2)
Out2=Left$(Out2,79)
Temp.ArrayS(Temp)=Out2
Strng="Line number"+Str$(Temp)+" replaced."
Call IO.O
10181
Exit Sub
10182
Resume 10181
End Sub
Sub Edit.Line
On Local Error Goto 10192
Strng="Line number(1-"+Mid$(Str$(Message.Length),2)+")?"
Call IO.I
Temp=Int(Val(Out2))
If Temp<1 Or Temp>Message.Length Then
Strng=Range$
Call IO.O
Exit Sub
Endif
Strng="Replace what word?"
Call IO.I
Temp$=Out2
If No.Input Then
Strng="No changes made."
Call IO.O
Exit Sub
Endif
Strng="Replace with what word?"
Call IO.I
Temp2$=Out2
If No.Input Or Temp$=Temp2$ Then
Strng="No changes made."
Call IO.O
Exit Sub
Endif
Temp2=False
Temp1=Instr(Temp.ArrayS(Temp),Temp$)
Do While Temp1
If Temp2=1 Then
Strng="Replace all occurences?"
No.Input.Out="Y"
Call IO.I
If No Then
Exit Do
Endif
Endif
Temp.ArrayS(Temp)=Left$(Temp.ArrayS(Temp),Temp1-1)+_
Temp2$+Mid$(Temp.ArrayS(Temp),Temp1+Len(Temp$))
Temp.ArrayS(Temp)=Left$(Temp.ArrayS(Temp),79)
Temp2=Temp2+1
Temp1=Instr(Temp.ArrayS(Temp),Temp$)
Loop
If Temp2 Then
Strng=Mid$(Str$(Temp2),2)+" changes made."
Else
Strng="No changes made."
Endif
Call IO.O
10191
Exit Sub
10192
Resume 10191
End Sub
Sub Delete.Line
On Local Error Goto 10202
Strng="From line number(1-"+Mid$(Str$(Message.Length),2)+")?"
Call IO.I
Temp=Int(Val(Out2))
If Temp<1 Or Temp>Message.Length Then
Strng=Range$
Call IO.O
Exit Sub
Endif
Strng="To line number("+Mid$(Str$(Temp),2)+"-"+_
Mid$(Str$(Message.Length),2)+")?"
Call IO.I
Temp2=Int(Val(Out2))
If Temp2<Temp Or Temp2>Message.Length Then
Strng=Range$
Call IO.O
Exit Sub
Endif
For Temp3=1 To Temp2-Temp+1
Message.Length=Message.Length-1
For Temp1=Temp To Message.Length
Temp.ArrayS(Temp1)=Temp.ArrayS(Temp1+1)
Next
Next
If Message.Length=False Then
Strng="No message left."
Call IO.O
Exit Sub
Endif
Strng="Line numbers"+Str$(Temp)+" to"+Str$(Temp2)+" deleted."
Call IO.O
10201
Exit Sub
10202
Resume 10201
End Sub
Sub Insert.Lines
On Local Error Goto 10212
If Message.Length>18 Then
Strng="Message buffer full."
Call IO.O
Exit Sub
Endif
Strng="Before line number(1-"+Mid$(Str$(Message.Length),2)+")?"
Call IO.I
Temp=Int(Val(Out2))
If Temp<1 Or Temp>Message.Length Then
Strng=Range$
Call IO.O
Exit Sub
Endif
Graphics.Off=True
Do While Message.Length<19
Word.Wrap=True
Strng="?"
Call IO.I
Word.Wrap=False
If No.Input Then
Exit Do
Endif
For Temp1=Message.Length To Temp Step -1
Temp.ArrayS(Temp1+1)=Temp.ArrayS(Temp1)
Next
Out2=Rtrim$(Out2)
Out2=Left$(Out2,79)
Temp.ArrayS(Temp)=Out2
Temp=Temp+1
Message.Length=Message.Length+1
Loop
Graphics.Off=False
If Message.Length=19 Then
Strng="Message buffer full."
Call IO.O
Endif
10211
Exit Sub
10212
Resume 10211
End Sub
Sub List.Lines
On Local Error Goto 10222
Line.Length=1
No.Input.Out="Y"
Strng="Display line numbers(y/n)?"
Call IO.I
If Yes Then
TempX=True
Else
TempX=False
Endif
Graphics.Off=True
For Temp=1 To Message.Length
Strng=Nul
If TempX Then
Strng=Right$(Str$(Temp+10),1)+":"
Endif
Strng=Strng+Temp.ArrayS(Temp)
Strng=Left$(Strng,79)
Call IO.O
Next
10221
Exit Sub
10222
Resume 10221
End Sub