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 >
BASIC Source File  |  1993-01-07  |  32KB  |  1,226 lines

  1.  Rem dndsub5.bas v2.9c
  2.  Rem $Include: 'dndbbs.inc'
  3.  
  4. Sub Mail
  5.  On Local Error Goto 10012
  6.  Close 4, 5, 6, 7, 8, 9
  7.  Redim Temp.ArrayS(1 To 19) As String
  8.  Do
  9.     Call Mail.Status.Line
  10.     Strng=Nul
  11.     Call IO.O
  12.     Line.Length=1
  13.     No.Input.Out="Q"
  14.     Strng="Mail command(?=Help): "
  15.     Call IO.I
  16.     VarX=True
  17.     Out3=Ucase$(Out2)
  18.     If Instr("EKNR",Out3) Then
  19.        Call Select.Base(VarX)
  20.        If VarX Then
  21.           Call Open.Mail
  22.        Endif
  23.     Endif
  24.     Call IO.O
  25.     If VarX Then
  26.        Select Case Out3
  27.        Case "E"
  28.           Call Enter.Message
  29.        Case "K"
  30.           Call Kill.Message
  31.        Case "L"
  32.           Call Lock.Mailbox(True)
  33.        Case "N"
  34.           Call New.Messages
  35.        Case "R"
  36.           Call Read.Messages
  37.        Case "U"
  38.           Call Lock.Mailbox(False)
  39.        Case "Q"
  40.           Exit Do
  41.        Case "?"
  42.           Stored.Parsed.Command1=Config3(26)
  43.           Call Read.Help(False)
  44.        Case Else
  45.           Graphics.Off=False
  46.           Strng="Type ? for Help."
  47.           Call IO.O
  48.        End Select
  49.     Endif
  50.  Loop
  51. 10011
  52.  Exit Sub
  53. 10012
  54.  Resume 10011
  55. End Sub
  56.  
  57. Sub Mail.Status.Line
  58.  On Local Error Goto 10022
  59.  Temp$=UserRecord.CodeName
  60.  Call Decrypt(Temp$)
  61.  Temp$=Rtrim$(Temp$)
  62.  Temp$=Lcase$(Temp$)
  63.  Mid$(Temp$,1,1)=Ucase$(Mid$(Temp$,1,1))
  64.  Temp$=Temp$+" > "
  65.  Get 3,User.Index,UserRecord
  66.  If UserRecord.Flags And Locked.User Then
  67.     Temp$=Temp$+"Mailbox locked"
  68.  Else
  69.     Temp$=Temp$+"Mailbox unlocked"
  70.  Endif
  71.  Temp$=Temp$+" > Last Message Read"+Str$(NewMessages.LastMessage)+"."
  72.  Temp$=Left$(Temp$,79)
  73.  Temp$=Temp$+Space$(79-Len(Temp$))
  74.  Call Local.ANSI(2,25,1)
  75.  Temp$=TempD$+Temp$
  76.  Call Display.Status.Line
  77. 10021
  78.  Exit Sub
  79. 10022
  80.  Resume 10021
  81. End Sub
  82.  
  83. Sub Enter.Message
  84.  On Local Error Goto 10032
  85.  Do
  86.     Graphics.Off=True
  87.     Line.Length=30
  88.     Strng="Message to(Press "+Enter$+" for all)?"
  89.     Call IO.I
  90.     Message.To=Ucase$(Out2)
  91.     Temp=True
  92.     If No.Input=False Then
  93.        Temp=False
  94.        For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
  95.           Get 3,Temp.User.Index,UserRecord
  96.           Strng=UserRecord.CodeName
  97.           Call Decrypt(Strng)
  98.           Strng=Rtrim$(Strng)
  99.           Strng=Ucase$(Strng)
  100.           If Message.To=Strng Then
  101.              If User.Index<>Temp.User.Index Then
  102.                 If (UserRecord.Flags And Locked.User)=False Then
  103.                    Temp=True
  104.                    Exit For
  105.                 Endif
  106.              Endif
  107.           Endif
  108.        Next
  109.        Get 3,User.Index,UserRecord
  110.     Endif
  111.     If Temp Then
  112.        Exit Do
  113.     Endif
  114.     Strng="There is no such user."
  115.     Call IO.O
  116.  Loop
  117.  Do
  118.     Line.Length=20
  119.     Strng="Subject?"
  120.     Call IO.I
  121.     Subject=Lcase$(Out2)
  122.     If Subject<>Nul Then
  123.        Exit Do
  124.     Endif
  125.     Strng="Abort message(y/n)?"
  126.     No.Input.Out="N"
  127.     Line.Length=1
  128.     Call IO.I
  129.     If Yes Then
  130.        Exit Do
  131.     Endif
  132.  Loop
  133.  If Subject<>Nul Then
  134.     Strng="Enter message. Maximum 19 lines."
  135.     Call IO.O
  136.     Message.Length=False
  137.     Do
  138.        Strng="Press "+Enter$+" on a blank line to edit."
  139.        Call IO.O
  140.        Do
  141.           Graphics.Off=True
  142.           If Message.Length=19 Then
  143.              Strng="Message buffer full."
  144.              Call IO.O
  145.              Exit Do
  146.           Endif
  147.           Word.Wrap=True
  148.           Strng="?"
  149.           Call IO.I
  150.           If No.Input Then
  151.              Exit Do
  152.           Endif
  153.           Message.Length=Message.Length+1
  154.           Out2=Rtrim$(Out2)
  155.           Out2=Left$(Out2,79)
  156.           Temp.ArrayS(Message.Length)=Out2
  157.        Loop
  158.        Word.Wrap=False
  159.        Call Edit.Message(VarX)
  160.        If VarX=-1 Then
  161.           Strng="Continue editing."
  162.           Call IO.O
  163.        Endif
  164.        If VarX=0 Then
  165.           Exit Do
  166.        Endif
  167.        If VarX=1 Then
  168.           Call Store.Message
  169.           Exit Do
  170.        Endif
  171.     Loop
  172.  Endif
  173. 10031
  174.  Exit Sub
  175. 10032
  176.  Resume 10031
  177. End Sub
  178.  
  179. Sub Lock.Mailbox(Var)
  180.  On Local Error Goto 10042
  181.  If Var Then
  182.     Strng="Mailbox locked."
  183.     UserRecord.Flags=UserRecord.Flags Or Locked.User
  184.  Else
  185.     Strng="Mailbox unlocked."
  186.     UserRecord.Flags=UserRecord.Flags And Not Locked.User
  187.  Endif
  188.  Put 3,User.Index,UserRecord
  189.  Call IO.O
  190. 10041
  191.  Exit Sub
  192. 10042
  193.  Resume 10041
  194. End Sub
  195.  
  196. Sub Kill.Message
  197.  On Local Error Goto 10052
  198.  Strng="Enter message number to delete?"
  199.  Call IO.I
  200.  Temp=Val(Out2)
  201.  If Temp<1 Or Temp>Lof(14)/Len(TableRecord) Then
  202.     Strng=Range$
  203.     Call IO.O
  204.     Exit Sub
  205.  Endif
  206.  Get 14,Temp,TableRecord
  207.  Strng=UserRecord.CodeName
  208.  Call Decrypt(Strng)
  209.  Strng=Rtrim$(Strng)
  210.  Strng=Ucase$(Strng)
  211.  Out2=TableRecord.MessageFrom
  212.  Out2=Rtrim$(Out2)
  213.  Out2=Ucase$(Out2)
  214.  If Strng<>Out2 Then
  215.     Strng="Message"+Str$(Temp)+" is not from you."
  216.     Call IO.O
  217.     Exit Sub
  218.  Endif
  219.  If TableRecord.MessageKilled="T" Then
  220.     Strng="Message"+Str$(Temp)+" is already deleted."
  221.     Call IO.O
  222.     Exit Sub
  223.  Endif
  224.  TableRecord.MessageKilled="T"
  225.  Put 14,Temp,TableRecord
  226.  Strng="Message"+Str$(Temp)+" deleted."
  227.  Call IO.O
  228. 10051
  229.  Exit Sub
  230. 10052
  231.  Resume 10051
  232. End Sub
  233.  
  234. Sub Read.Message(Var)
  235.  On Local Error Goto 10062
  236.  Get 14,Var,TableRecord
  237.  Strng=UserRecord.CodeName
  238.  Call Decrypt(Strng)
  239.  Strng=Rtrim$(Strng)
  240.  Strng=Ucase$(Strng)
  241.  If TableRecord.MessageKilled="T" Then
  242.     Graphics.Off=True
  243.     Strng="Message #"+Mid$(Str$(Var),2)+" was deleted."
  244.     Call IO.O
  245.     Exit Sub
  246.  Endif
  247.  If TableRecord.MessageKilled="F" Then
  248.     Select Case Message.Base.Number
  249.     Case 1
  250.        Var1=False
  251.     Case 2
  252.        Var1=True
  253.     Case Else
  254.        Get 10,Message.Base.Number-2,MessageBaseRecord
  255.        If MessageBaseRecord.BaseType And Private.Base Then
  256.           Var1=True
  257.        Endif
  258.     End Select
  259.     If Var1 Then
  260.        Out2=TableRecord.MessageTo
  261.        Out2=Rtrim$(Out2)
  262.        Out2=Ucase$(Out2)
  263.        If Out2=Nul Or Strng=Out2 Then
  264.           Var1=False
  265.        Endif
  266.     Endif
  267.     If Var1 Then
  268.        Strng="Message #"+Mid$(Str$(Var),2)+" is private."
  269.        Call IO.O
  270.     Endif
  271.     If Var1=False Then
  272.        Graphics.Off=True
  273.        Strng="Msg#:"+Str$(Var)+" of"+Str$(Lof(14)/Len(TableRecord))
  274.        Call IO.O
  275.        Strng="From: "+TableRecord.MessageFrom
  276.        Call IO.O
  277.        Out2=TableRecord.MessageTo
  278.        Out2=Rtrim$(Out2)
  279.        If Out2=Nul Then
  280.           Out2="ALL"
  281.        Endif
  282.        Out2=Lcase$(Out2)
  283.        Mid$(Out2,1,1)=Ucase$(Mid$(Out2,1,1))
  284.        Strng="To:   "+Out2
  285.        Call IO.O
  286.        Strng="Subj: "+TableRecord.MessageSubject
  287.        Call IO.O
  288.        Strng="Time: "+TableRecord.MessageTime
  289.        Call IO.O
  290.        Allow.Break=True
  291.        For Var2=TableRecord.MessageStart To_
  292.        TableRecord.MessageStart+TableRecord.MessageLength-1
  293.           Get 16,Var2,MessageRecord
  294.           Strng=MessageRecord.Message
  295.           VarX=Instr(Strng,Chr$(1))
  296.           If VarX Then
  297.              Strng=Left$(Strng,VarX-1)
  298.           Endif
  299.           Strng=Rtrim$(Strng)
  300.           Call IO.O
  301.           If Break Then
  302.              Exit For
  303.           Endif
  304.        Next
  305.        Allow.Break=False
  306.        Call IO.O
  307.     Endif
  308.  Endif
  309. 10061
  310.  Exit Sub
  311. 10062
  312.  Resume 10061
  313. End Sub
  314.  
  315. Sub Read.Messages
  316.  On Local Error Goto 10072
  317.  Graphics.Off=False
  318.  No.Input.Out="1"
  319.  Strng="Message number(1-"+Mid$(Str$(Lof(14)/Len(TableRecord)),2)+")?"
  320.  Call IO.I
  321.  Message.Read=Val(Out2)
  322.  If Message.Read<1 Or Message.Read>Lof(14)/Len(TableRecord) Then
  323.     Strng=Range$
  324.     Call IO.O
  325.     Exit Sub
  326.  Endif
  327.  For TempX=Message.Read To Lof(14)/Len(TableRecord)
  328.     Call Read.Message(TempX)
  329.     If TempX>NewMessages.LastMessage Then
  330.        NewMessages.LastMessage=TempX
  331.     Endif
  332.     Graphics.Off=False
  333.     Strng=More$
  334.     Line.Length=1
  335.     No.Input.Out="Y"
  336.     Call IO.I
  337.     If No Then
  338.        Exit For
  339.     Endif
  340.     Temp1=Val(Out2)
  341.     If Temp1>False Then
  342.        If Temp1>Lof(14)/Len(TableRecord) Then
  343.           Temp1=Lof(14)/Len(TableRecord)
  344.        Endif
  345.        TempX=Temp1-1
  346.     Endif
  347.   Next
  348.   Strng="End of messages."
  349.   Call IO.O
  350.   Put 15,User.Index,NewMessages
  351. 10071
  352.  Exit Sub
  353. 10072
  354.  Resume 10071
  355. End Sub
  356.  
  357. Sub New.Messages
  358.  On Local Error Goto 10082
  359.  Get 15,User.Index,NewMessages
  360.  If NewMessages.LastMessage>=Lof(14)/Len(TableRecord) Then
  361.     Strng="No new messages."
  362.     Call IO.O
  363.     Exit Sub
  364.  Endif
  365.  For TempX=NewMessages.LastMessage+1 To Lof(14)/Len(TableRecord)
  366.     Call Read.Message(TempX)
  367.     NewMessages.LastMessage=TempX
  368.     Graphics.Off=False
  369.     Strng=More$
  370.     No.Input.Out="Y"
  371.     Call IO.I
  372.     If No Then
  373.        Exit For
  374.     Endif
  375.  Next
  376.  Put 15,User.Index,NewMessages
  377. 10081
  378.  Exit Sub
  379. 10082
  380.  Resume 10081
  381. End Sub
  382.  
  383. Sub Select.Base(Var)
  384.  On Local Error Goto 10092
  385.  Strng="Select message base:"
  386.  Call IO.O
  387.  Graphics.Off=True
  388.  Strng=Mask$+"1: public, Type: (public)"
  389.  Call IO.O
  390.  Strng=Mask$+"2: private, Type: (private)"
  391.  Call IO.O
  392.  Temp1=2
  393.  For Temp=1 To Lof(10)/Len(MessageBaseRecord)
  394.     Get 10,Temp,MessageBaseRecord
  395.     Out2=MessageBaseRecord.BaseMessName
  396.     Out2=Rtrim$(Out2)
  397.     Out2=Lcase$(Out2)
  398.     If Left$(Out2,9)<>Deleted$ Then
  399.        Strng=Mask$+Mid$(Str$(Temp+2),2)+": "+Out2+", Type: "
  400.        If MessageBaseRecord.BaseType And Public.Base Then
  401.           Strng=Strng+"(public) "
  402.        Endif
  403.        If MessageBaseRecord.BaseType And Private.Base Then
  404.           Strng=Strng+"(private) "
  405.        Endif
  406.        If MessageBaseRecord.BaseType And DM.Base Then
  407.           Strng=Strng+"(DMs only) "
  408.        Endif
  409.        If MessageBaseRecord.BaseType And Sysop.Base Then
  410.           Strng=Strng+"(Sysops only) "
  411.        Endif
  412.        If MessageBaseRecord.BaseType And TownMayor.Base Then
  413.           Strng=Strng+"(Town Mayor) "
  414.        Endif
  415.        If MessageBaseRecord.BaseType And Governor.Base Then
  416.           Strng=Strng+"(Governor) "
  417.        Endif
  418.        If MessageBaseRecord.BaseType And GuildMaster.Base Then
  419.           Strng=Strng+"(Guild Master) "
  420.        Endif
  421.        Strng=Rtrim$(Strng)
  422.        Call IO.O
  423.        Temp1=Temp1+1
  424.        If Temp1>22 Then
  425.           Temp1=False
  426.           Call More.Prompt
  427.           If No Then
  428.              Exit For
  429.           Endif
  430.        Endif
  431.     Endif
  432.  Next
  433.  Graphics.Off=False
  434.  Strng="Enter message base number(1-"+_
  435.  Mid$(Str$(Lof(10)/Len(MessageBaseRecord)+2),2)+")?"
  436.  Call IO.I
  437.  Temp=Val(Out2)
  438.  If Temp<1 Or Temp>Lof(10)/Len(MessageBaseRecord)+2 Then
  439.     Strng=Range$
  440.     Call IO.O
  441.     Var=False
  442.     Exit Sub
  443.  Endif
  444.  Select Case Temp
  445.  Case 1
  446.     Message.Name="public"
  447.     Message.Base.Name=Config3(58)
  448.     Message.Base.Number=1
  449.     Var=True
  450.  Case 2
  451.     Message.Name="private"
  452.     Message.Base.Name=Config3(60)
  453.     Message.Base.Number=2
  454.     Var=True
  455.  Case Else
  456.     Get 10,Temp-2,MessageBaseRecord
  457.     Out2=MessageBaseRecord.BaseMessName
  458.     Out2=Rtrim$(Out2)
  459.     Out2=Lcase$(Out2)
  460.     If Left$(Out2,9)=Deleted$ Then
  461.        Strng="Deleted message base."
  462.        Call IO.O
  463.        Var=False
  464.        Exit Sub
  465.     Endif
  466.     Temp2=False
  467.     If MessageBaseRecord.BaseType And Public.Base Then
  468.        Temp2=True
  469.     Endif
  470.     If MessageBaseRecord.BaseType And Private.Base Then
  471.        Temp2=True
  472.     Endif
  473.     If MessageBaseRecord.BaseType And DM.Base Then
  474.        If Dungeon.Master Or Dungeon.Master.Assistant Or Sysop Then
  475.           Temp2=True
  476.        Endif
  477.     Endif
  478.     If MessageBaseRecord.BaseType And Sysop.Base Then
  479.        If Sysop Then
  480.           Temp2=True
  481.        Endif
  482.     Endif
  483.     If MessageBaseRecord.BaseType And TownMayor.Base Then
  484.        If UserRecord.Flags And Special.Char1 Then
  485.           Temp2=True
  486.        Endif
  487.     Endif
  488.     If MessageBaseRecord.BaseType And Governor.Base Then
  489.        If UserRecord.Flags And Special.Char2 Then
  490.           Temp2=True
  491.        Endif
  492.     Endif
  493.     If MessageBaseRecord.BaseType And GuildMaster.Base Then
  494.        If UserRecord.Flags And Special.Char3 Then
  495.           Temp2=True
  496.        Endif
  497.     Endif
  498.     If Temp2 Then
  499.        Message.Name=MessageBaseRecord.BaseMessName
  500.        Message.Base.Name=MessageBaseRecord.BaseFileName
  501.        Message.Base.Number=Temp
  502.        Var=True
  503.     Else
  504.        Strng="You can not select message base #"+Mid$(Str$(Temp),2)+"."
  505.        Call IO.O
  506.        Var=False
  507.     Endif
  508.  End Select
  509. 10091
  510.  Exit Sub
  511. 10092
  512.  Resume 10091
  513. End Sub
  514.  
  515. Sub Edit.Message(Var)
  516.  On Local Error Goto 10102
  517.  Do
  518.     Line.Length=1
  519.     Graphics.Off=False
  520.     Strng="Edit command(?=Help): "
  521.     No.Input.Out="?"
  522.     Call IO.I
  523.     Out2=Ucase$(Out2)
  524.     Select Case Out2
  525.     Case "C"
  526.        Var=-1
  527.        Exit Do
  528.     Case "R"
  529.        Call Replace.Line
  530.     Case "E"
  531.        Call Edit.Line
  532.     Case "D"
  533.        Call Delete.Line
  534.     Case "I"
  535.        Call Insert.Lines
  536.     Case "A"
  537.        Strng="Are you sure(y/n)?"
  538.        No.Input.Out="N"
  539.        Call IO.I
  540.        If Yes Then
  541.           Var=0
  542.           Exit Do
  543.        Endif
  544.     Case "L"
  545.        Call List.Lines
  546.     Case "S"
  547.        Var=1
  548.        Exit Do
  549.     Case "?"
  550.        Stored.Parsed.Command1=Config3(27)
  551.        Call Read.Help(False)
  552.     Case Else
  553.        Strng="Type ? for Help."
  554.        Call IO.O
  555.     End Select
  556.  Loop
  557. 10101
  558.  Exit Sub
  559. 10102
  560.  Resume 10101
  561. End Sub
  562.  
  563. Sub Store.Message
  564.  On Local Error Goto 10112
  565.  Strng="Storing message."
  566.  Call IO.O
  567.  TableRecord.MessageTime=FNclock$
  568.  Strng=UserRecord.CodeName
  569.  Call Decrypt(Strng)
  570.  TableRecord.MessageFrom=Strng
  571.  TableRecord.MessageKilled="F"
  572.  TableRecord.MessageTo=Message.To
  573.  TableRecord.MessageSubject=Subject
  574.  TableRecord.MessageLength=Message.Length+1
  575.  TableRecord.MessageStart=Lof(16)/Len(MessageRecord)+1
  576.  Put 14,Lof(14)/Len(TableRecord)+1,TableRecord
  577.  Out4=UserRecord.Classname
  578.  Call Decrypt(Out4)
  579.  Out4=Rtrim$(Out4)
  580.  Strng="Stat: "+Out4+" "
  581.  If UserRecord.Flags And Special.Char1 Then
  582.     Strng=Strng+"Town Mayor "
  583.  Endif
  584.  If UserRecord.Flags And Special.Char2 Then
  585.     Strng=Strng+"Governor "
  586.  Endif
  587.  If UserRecord.Flags And Special.Char3 Then
  588.     Strng=Strng+"Guild Master "
  589.  Endif
  590.  If UserRecord.Flags And Special.Char4 Then
  591.     Strng=Strng+"Sysop "
  592.  Endif
  593.  Strng=Left$(Strng,79)
  594.  Strng=Strng+Chr$(1)
  595.  MessageRecord.Message=Strng
  596.  TempX=Lof(16)/Len(MessageRecord)+1
  597.  Put 16,TempX,MessageRecord
  598.  For Temp=1 To Message.Length
  599.     Strng=Temp.ArrayS(Temp)
  600.     Strng=Left$(Strng,79)
  601.     Strng=Strng+Chr$(1)
  602.     MessageRecord.Message=Strng
  603.     TempX=Lof(16)/Len(MessageRecord)+1
  604.     Put 16,TempX,MessageRecord
  605.  Next
  606. 10111
  607.  Exit Sub
  608. 10112
  609.  Resume 10111
  610. End Sub
  611.  
  612. Sub Bank
  613.  On Local Error Goto 10124
  614.  Static TempG#, Balance.Taken
  615.  If Balance.Taken=False Then
  616.     TempG#=False
  617.     For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
  618.        Get 3,Temp.User.Index,UserRecord
  619.        Strng=UserRecord.CodeName
  620.        Call Decrypt(Strng)
  621. 10121  If Left$(Strng,9)<>Deleted$ Then
  622.           TempG#=TempG#+UserRecord.Bank
  623.        Endif
  624.     Next
  625. 10122
  626.     Balance.Taken=True
  627.  Endif
  628.  Get 3,User.Index,UserRecord
  629.  Do While Security.Guard
  630.     Temp$=UserRecord.CodeName
  631.     Call Decrypt(Temp$)
  632.     Temp$=Rtrim$(Temp$)
  633.     Temp$=Lcase$(Temp$)
  634.     Mid$(Temp$,1,1)=Ucase$(Mid$(Temp$,1,1))
  635.     Temp$=Temp$+" > "
  636.     Temp$=Temp$+"Gold:"+Str$(UserRecord.Gold)+" "
  637.     Temp$=Temp$+"Bank:"+Str$(UserRecord.Bank)+" "
  638.     Temp$=Temp$+"Loan:"+Str$(UserRecord.Borrow)
  639.     If Len(Temp$)<57 Then
  640.        Temp$=Temp$+" > Interest Rate:"+Str$(Config1(30)*100)+"%"
  641.     Endif
  642.     Temp$=Left$(Temp$,79)
  643.     Temp$=Temp$+Space$(79-Len(Temp$))
  644.     Call Local.ANSI(2,25,1)
  645.     Temp$=TempD$+Temp$
  646.     Call Display.Status.Line
  647.     Graphics.Off=False
  648.     Strng="The broker asks: What can I do for you?"
  649.     Line.Length=1
  650.     No.Input.Out="?"
  651.     Call IO.I
  652.     Select Case Ucase$(Out2)
  653.     Case "D"
  654.        If UserRecord.Gold<1 Then
  655.           Strng="You have no gold to deposit!"
  656.           Call IO.O
  657.        Else
  658.           Strng="How much(1-"+Mid$(Str$(UserRecord.Gold),2)+")?"
  659.           Call IO.I
  660.           Temp3#=Val(Out2)
  661.           If Temp3#<1 Or Temp3#>UserRecord.Gold Then
  662.              Strng="You don't have that much gold!"
  663.              Call IO.O
  664.           Else
  665.              UserRecord.Bank=UserRecord.Bank+Temp3#
  666.              UserRecord.Gold=UserRecord.Gold-Temp3#
  667.              Put 3,User.Index,UserRecord
  668.              TempG#=TempG#+Temp3#
  669.              Strng="You hand him the gold."
  670.              Call IO.O
  671.           Endif
  672.        Endif
  673.     Case "T"
  674.        If UserRecord.Bank<1 Then
  675.           Strng="You have nothing in your account to transfer!"
  676.           Call IO.O
  677.        Else
  678.           Strng="How much(1-"+Mid$(Str$(UserRecord.Bank),2)+")?"
  679.           Call IO.I
  680.           Temp3#=Val(Out2)
  681.           If Temp3#<1 Or Temp3#>UserRecord.Bank Then
  682.              Strng="You don't have that much gold in the bank!"
  683.              Call IO.O
  684.           Else
  685.              Strng="Transfer to what person?"
  686.              Call IO.I
  687.              Put 3,User.Index,UserRecord
  688.              Out2=Ucase$(Out2)
  689.              Out2=Rtrim$(Out2)
  690.              Temp1=False
  691.              For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
  692.                 Get 3,Temp.User.Index,UserRecord
  693.                 Strng=UserRecord.CodeName
  694.                 Call Decrypt(Strng)
  695.                 Strng=Rtrim$(Strng)
  696.                 If Strng=Out2 Then
  697.                    If User.Index<>Temp.User.Index Then
  698.                       Temp1=True
  699.                       Exit For
  700.                    Endif
  701.                 Endif
  702.              Next
  703.              If Temp1=False Then
  704.                 Strng="There's nobody in my ledgers with that name!"
  705.                 Call IO.O
  706.                 Get 3,User.Index,UserRecord
  707.              Else
  708.                 UserRecord.Bank=UserRecord.Bank+Temp3#
  709.                 Put 3,Temp.User.Index,UserRecord
  710.                 Get 3,User.Index,UserRecord
  711.                 Strng="The broker works with his ledgers for a while."
  712.                 Call IO.O
  713.                 Strng=Mid$(Str$(Temp3#),2)+" transferred to his account."
  714.                 Call IO.O
  715.                 UserRecord.Bank=UserRecord.Bank-Temp3#
  716.              Endif
  717.           Endif
  718.        Endif
  719.     Case "W"
  720.        If UserRecord.Bank<1 Then
  721.           Strng="You have nothing to withdraw!"
  722.           Call IO.O
  723.        Else
  724.           If UserRecord.Borrow>False Then
  725.              Strng="You must pay back your loan first!"
  726.              Call IO.O
  727.           Else
  728.              Strng="How much(1-"+Mid$(Str$(UserRecord.Bank),2)+")?"
  729.              Call IO.I
  730.              Temp3#=Val(Out2)
  731.              If Temp3#<1 Or Temp3#>UserRecord.Bank Then
  732.                 Strng="You don't have that much gold!"
  733.                 Call IO.O
  734.              Else
  735.                 UserRecord.Bank=UserRecord.Bank-Temp3#
  736.                 UserRecord.Gold=UserRecord.Gold+Temp3#
  737.                 Put 3,User.Index,UserRecord
  738.                 TempG#=TempG#-Temp3#
  739.                 If TempG#<False Then
  740.                    TempG#=False
  741.                 Endif
  742.                 Strng="The broker hands you the gold."
  743.                 Call IO.O
  744.              Endif
  745.           Endif
  746.        Endif
  747.     Case "R"
  748.        If UserRecord.Borrow>False Then
  749.           Strng="You must pay back your loan first!"
  750.           Call IO.O
  751.        Else
  752.           If TempG#=False Then
  753.              Strng="The bank is broke."
  754.              Call IO.O
  755.           Else
  756.              Strng="Are you sure(y/n)?"
  757.              Line.Length=1
  758.              No.Input.Out="N"
  759.              Call IO.I
  760.              If Yes Then
  761.                 Strng="You rob the bank!"
  762.                 Call IO.O
  763.                 If Rnd>.5 Then
  764.                    Temp3#=Int((UserRecord.Level*10)+Rnd*5000)
  765.                    TempG#=TempG#-Temp3#
  766.                    If TempG#<False Then
  767.                       TempG#=False
  768.                    Endif
  769.                    Strng="You steal"+Str$(Temp3#)+" gold from the bank!"
  770.                    Call IO.O
  771.                    UserRecord.Gold=UserRecord.Gold+Temp3#
  772.                    Put 3,User.Index,UserRecord
  773.                 Else
  774.                    Strng="The broker catches you!"
  775.                    Call IO.O
  776.                    Strng="The broker hits you for"
  777.                    Out3="the broker for robbing the bank"
  778.                    Temp#=Int(Rnd*UserRecord.Fatigue+UserRecord.Level*5)
  779.                    If Temp#>MaxInt Then
  780.                       Temp#=MaxInt
  781.                    Endif
  782.                    Prefix2=Nul
  783.                    Temp2=Cint(Temp#)
  784.                    Call Hit.Player(Temp2)
  785.                    Exit Sub
  786.                 Endif
  787.              Endif
  788.           Endif
  789.        Endif
  790.     Case "B"
  791.        If TempG#<1 Then
  792.           Strng="The broker informs you the bank is broke!"
  793.           Call IO.O
  794.        Else
  795.           Strng="The broker says: The bank has"+Str$(TempG#)+" gold."
  796.           Call IO.O
  797.           If TempG#>MaxInt Then
  798.              TempX=MaxInt
  799.           Else
  800.              TempX=TempG#
  801.           Endif
  802.           If UserRecord.Borrow>=MaxInt Then
  803.              Strng="The broker says: You can't borrow any more!"
  804.              Call IO.O
  805.           Else
  806.              Temp2=TempX-UserRecord.Borrow
  807.              If Temp2>TempX Then
  808.                 TempX=Temp2
  809.              Endif
  810.              Strng="How much will you borrow(1-"+Mid$(Str$(TempX),2)+")?"
  811.              Call IO.I
  812.              If Val(Out2)<1 Or Val(Out2)>MaxInt Then
  813.                 Strng="The broker says: You can't borrow that much!"
  814.                 Call IO.O
  815.              Else
  816.                 Temp2=Val(Out2)
  817.                 If Temp2>TempX Then
  818.                    Strng="The broker says: You can't borrow that much!"
  819.                    Call IO.O
  820.                 Else
  821.                    Strng="The broker hands you the gold."
  822.                    Call IO.O
  823.                    UserRecord.Gold=UserRecord.Gold+Temp2
  824.                    If UserRecord.Borrow+Temp2>MaxInt Then
  825.                       UserRecord.Borrow=MaxInt
  826.                    Else
  827.                       UserRecord.Borrow=UserRecord.Borrow+Temp2
  828.                    Endif
  829.                    TempG#=TempG#-Temp2
  830.                    If TempG#<False Then
  831.                       TempG#=False
  832.                    Endif
  833.                 Endif
  834.              Endif
  835.           Endif
  836.        Endif
  837.     Case "P"
  838.        Graphics.Off=True
  839.        If UserRecord.Borrow<1 Then
  840.           Strng="You don't have any debt with the bank!"
  841.           Call IO.O
  842.        Else
  843.           If UserRecord.Bank>False Then
  844.              Strng="The broker asks: Pay back with your current bank account?"
  845.              Line.Length=1
  846.              No.Input.Out="Y"
  847.              Call IO.I
  848.              If Yes Then
  849.                 If UserRecord.Borrow-UserRecord.Bank<1 Then
  850.                    UserRecord.Bank=UserRecord.Bank-UserRecord.Borrow
  851.                    UserRecord.Borrow=False
  852.                    Strng="The broker says: Your loan is paid off!"
  853.                    Call IO.O
  854.                 Else
  855.                    UserRecord.Borrow=UserRecord.Borrow-UserRecord.Bank
  856.                    UserRecord.Bank=False
  857.                    Strng="The broker says: Your balance paid part of the loan!"
  858.                    Call IO.O
  859.                 Endif
  860.              Endif
  861.           Endif
  862.           If UserRecord.Borrow>False Then
  863.              If UserRecord.Gold>False Then
  864.                 Strng="The broker asks: Pay back with your current gold?"
  865.                 Line.Length=1
  866.                 No.Input.Out="Y"
  867.                 Call IO.I
  868.                 If Yes Then
  869.                    If UserRecord.Borrow-UserRecord.Gold<1 Then
  870.                       UserRecord.Gold=UserRecord.Gold-UserRecord.Borrow
  871.                       TempG#=TempG#+UserRecord.Borrow
  872.                       UserRecord.Borrow=False
  873.                       Strng="The broker says: Your loan is paid off!"
  874.                       Call IO.O
  875.                    Else
  876.                       UserRecord.Borrow=UserRecord.Borrow-UserRecord.Gold
  877.                       TempG#=TempG#+UserRecord.Gold
  878.                       UserRecord.Gold=False
  879.                       Strng="The broker says: Your gold paid part of the loan!"
  880.                       Call IO.O
  881.                    Endif
  882.                 Endif
  883.              Endif
  884.           Endif
  885.        Endif
  886.     Case "A"
  887.        Strng="He fumbles with his ledgers and says:"
  888.        Call IO.O
  889.        Graphics.Off=True
  890.        Strng="The current account interest rate is"+Str$(Config1(30)*100)+"%"
  891.        Call IO.O
  892.        Strng="The current lending interest rate is"+Str$(Config1(10)*100)+"%"
  893.        Call IO.O
  894.        Strng="The bank reports total holdings of"+Str$(TempG#)+" gold."
  895.        Call IO.O
  896.        Strng="You have"+Str$(UserRecord.Gold)+_
  897.        " gold and"+Str$(UserRecord.Bank)+" in the bank."
  898.        Call IO.O
  899.        Strng="You have borrowed"+Str$(UserRecord.Borrow)+_
  900.        " gold from the bank."
  901.        Call IO.O
  902.     Case "Q"
  903.        Put 3,User.Index,UserRecord
  904.        Exit Do
  905.     Case "?"
  906.        Stored.Parsed.Command1=Config3(46)
  907.        Call Read.Help(False)
  908.     Case Else
  909.        Strng="Type ? for Help."
  910.        Call IO.O
  911.     End Select
  912.  Loop
  913. 10123
  914.  Exit Sub
  915. 10124
  916.  If Erl=10121 Then
  917.     Resume 10122
  918.  Endif
  919.  Resume 10123
  920. End Sub
  921.  
  922. Sub Init.Mail
  923.  On Local Error Goto 10132
  924.  Message.Base.Name=Config3(58)
  925.  Call Open.Mail
  926.  NewMessages.LastMessage=False
  927.  NewMessages.EmptyBuffer=False
  928.  Put 15,User.Index,NewMessages
  929.  Message.Base.Name=Config3(60)
  930.  Call Open.Mail
  931.  NewMessages.LastMessage=False
  932.  NewMessages.EmptyBuffer=False
  933.  Put 15,User.Index,NewMessages
  934.  For Temp3=1 To Lof(10)/Len(MessageBaseRecord)
  935.     Get 10,Temp3,MessageBaseRecord
  936.     Message.Base.Name=MessageBaseRecord.BaseFileName
  937.     Call Open.Mail
  938.     NewMessages.LastMessage=False
  939.     NewMessages.EmptyBuffer=False
  940.     Put 15,User.Index,NewMessages
  941.  Next
  942. 10131
  943.  Exit Sub
  944. 10132
  945.  Resume 10131
  946. End Sub
  947.  
  948. Sub New.Mail
  949.  On Local Error Goto 10142
  950.  Message.Base.Name=Config3(58)
  951.  Message.Base="public"
  952.  Call Check.Mail
  953.  Message.Base.Name=Config3(60)
  954.  Message.Base="private"
  955.  Call Check.Mail
  956.  Strng="Check all message bases for new mail(y/n)?"
  957.  No.Input.Out="Y"
  958.  Call IO.I
  959.  If Yes Then
  960.     For Temp3=1 To Lof(10)/Len(MessageBaseRecord)
  961.        Get 10,Temp3,MessageBaseRecord
  962.        Message.Base.Name=MessageBaseRecord.BaseFileName
  963.        Message.Base=Rtrim$(MessageBaseRecord.BaseMessName)
  964.        Call Check.Mail
  965.     Next
  966.  Endif
  967. 10141
  968.  Exit Sub
  969. 10142
  970.  Resume 10141
  971. End Sub
  972.  
  973. Sub Check.Mail
  974.  On Local Error Goto 10152
  975.  Call Open.Mail
  976.  Graphics.Off=True
  977.  Temp5=False
  978.  Strng=UserRecord.CodeName
  979.  Call Decrypt(Strng)
  980.  Get 15,User.Index,NewMessages
  981.  Temp1=NewMessages.LastMessage
  982.  Temp2=Lof(14)/Len(TableRecord)
  983.  If Temp1>False And Temp1<=Temp2 Then
  984.     For Temp4=Temp1 To Temp2
  985.        Get 14,Temp4,TableRecord
  986.        If TableRecord.MessageKilled="F" Then
  987.           If TableRecord.MessageTo=Strng Then
  988.              Temp5=Temp5+1
  989.           Endif
  990.        Endif
  991.     Next
  992.  Endif
  993.  Graphics.Off=True
  994.  Strng=Lcase$(Message.Base)+" message base>"+Str$(Temp5)+" messages."
  995.  Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
  996.  Call IO.O
  997.  Graphics.Off=False
  998. 10151
  999.  Exit Sub
  1000. 10152
  1001.  Resume 10151
  1002. End Sub
  1003.  
  1004. Sub Open.Mail
  1005.  On Local Error Goto 10162
  1006.  Close 14, 15, 16
  1007.  Message.Base.Name=Rtrim$(Message.Base.Name)
  1008.  FileName=Config3(54)+Message.Base.Name+".TBL"
  1009.  Open FileName For Random Shared As #14 Len=Len(TableRecord)
  1010.  FileName=Config3(54)+Message.Base.Name+".NEW"
  1011.  Open FileName For Random Shared As #15 Len=Len(NewMessages)
  1012.  FileName=Config3(54)+Message.Base.Name+".DAT"
  1013.  Open FileName For Random Shared As #16 Len=Len(MessageRecord)
  1014.  Call Init.Messages
  1015. 10161
  1016.  Exit Sub
  1017. 10162
  1018.  Resume 10161
  1019. End Sub
  1020.  
  1021. Sub Init.Messages
  1022.  On Local Error Goto 10172
  1023.  Var=Lof(15)/Len(NewMessages)
  1024.  If User.Index>Var Then
  1025.     For Var1=Var+1 To User.Index
  1026.        NewMessages.LastMessage=False
  1027.        NewMessages.EmptyBuffer=False
  1028.        Put 15,Var1,NewMessages
  1029.     Next
  1030.  Endif
  1031. 10171
  1032.  Exit Sub
  1033. 10172
  1034.  Resume 10171
  1035. End Sub
  1036.  
  1037. Sub Replace.Line
  1038.  On Local Error Goto 10182
  1039.  Strng="Line number(1-"+Mid$(Str$(Message.Length),2)+")?"
  1040.  Call IO.I
  1041.  Temp=Int(Val(Out2))
  1042.  If Temp<1 Or Temp>Message.Length Then
  1043.     Strng=Range$
  1044.     Call IO.O
  1045.     Exit Sub
  1046.  Endif
  1047.  Strng="Replacement line:"
  1048.  Call IO.O
  1049.  Line.Length=79
  1050.  Strng="?"
  1051.  Call IO.I
  1052.  Out2=Rtrim$(Out2)
  1053.  Out2=Left$(Out2,79)
  1054.  Temp.ArrayS(Temp)=Out2
  1055.  Strng="Line number"+Str$(Temp)+" replaced."
  1056.  Call IO.O
  1057. 10181
  1058.  Exit Sub
  1059. 10182
  1060.  Resume 10181
  1061. End Sub
  1062.  
  1063. Sub Edit.Line
  1064.  On Local Error Goto 10192
  1065.  Strng="Line number(1-"+Mid$(Str$(Message.Length),2)+")?"
  1066.  Call IO.I
  1067.  Temp=Int(Val(Out2))
  1068.  If Temp<1 Or Temp>Message.Length Then
  1069.     Strng=Range$
  1070.     Call IO.O
  1071.     Exit Sub
  1072.  Endif
  1073.  Strng="Replace what word?"
  1074.  Call IO.I
  1075.  Temp$=Out2
  1076.  If No.Input Then
  1077.     Strng="No changes made."
  1078.     Call IO.O
  1079.     Exit Sub
  1080.  Endif
  1081.  Strng="Replace with what word?"
  1082.  Call IO.I
  1083.  Temp2$=Out2
  1084.  If No.Input Or Temp$=Temp2$ Then
  1085.     Strng="No changes made."
  1086.     Call IO.O
  1087.     Exit Sub
  1088.  Endif
  1089.  Temp2=False
  1090.  Temp1=Instr(Temp.ArrayS(Temp),Temp$)
  1091.  Do While Temp1
  1092.     If Temp2=1 Then
  1093.        Strng="Replace all occurences?"
  1094.        No.Input.Out="Y"
  1095.        Call IO.I
  1096.        If No Then
  1097.           Exit Do
  1098.        Endif
  1099.     Endif
  1100.     Temp.ArrayS(Temp)=Left$(Temp.ArrayS(Temp),Temp1-1)+_
  1101.     Temp2$+Mid$(Temp.ArrayS(Temp),Temp1+Len(Temp$))
  1102.     Temp.ArrayS(Temp)=Left$(Temp.ArrayS(Temp),79)
  1103.     Temp2=Temp2+1
  1104.     Temp1=Instr(Temp.ArrayS(Temp),Temp$)
  1105.  Loop
  1106.  If Temp2 Then
  1107.     Strng=Mid$(Str$(Temp2),2)+" changes made."
  1108.  Else
  1109.     Strng="No changes made."
  1110.  Endif
  1111.  Call IO.O
  1112. 10191
  1113.  Exit Sub
  1114. 10192
  1115.  Resume 10191
  1116. End Sub
  1117.  
  1118. Sub Delete.Line
  1119.  On Local Error Goto 10202
  1120.  Strng="From line number(1-"+Mid$(Str$(Message.Length),2)+")?"
  1121.  Call IO.I
  1122.  Temp=Int(Val(Out2))
  1123.  If Temp<1 Or Temp>Message.Length Then
  1124.     Strng=Range$
  1125.     Call IO.O
  1126.     Exit Sub
  1127.  Endif
  1128.  Strng="To line number("+Mid$(Str$(Temp),2)+"-"+_
  1129.  Mid$(Str$(Message.Length),2)+")?"
  1130.  Call IO.I
  1131.  Temp2=Int(Val(Out2))
  1132.  If Temp2<Temp Or Temp2>Message.Length Then
  1133.     Strng=Range$
  1134.     Call IO.O
  1135.     Exit Sub
  1136.  Endif
  1137.  For Temp3=1 To Temp2-Temp+1
  1138.     Message.Length=Message.Length-1
  1139.     For Temp1=Temp To Message.Length
  1140.        Temp.ArrayS(Temp1)=Temp.ArrayS(Temp1+1)
  1141.     Next
  1142.  Next
  1143.  If Message.Length=False Then
  1144.     Strng="No message left."
  1145.     Call IO.O
  1146.     Exit Sub
  1147.  Endif
  1148.  Strng="Line numbers"+Str$(Temp)+" to"+Str$(Temp2)+" deleted."
  1149.  Call IO.O
  1150. 10201
  1151.  Exit Sub
  1152. 10202
  1153.  Resume 10201
  1154. End Sub
  1155.  
  1156. Sub Insert.Lines
  1157.  On Local Error Goto 10212
  1158.  If Message.Length>18 Then
  1159.     Strng="Message buffer full."
  1160.     Call IO.O
  1161.     Exit Sub
  1162.  Endif
  1163.  Strng="Before line number(1-"+Mid$(Str$(Message.Length),2)+")?"
  1164.  Call IO.I
  1165.  Temp=Int(Val(Out2))
  1166.  If Temp<1 Or Temp>Message.Length Then
  1167.     Strng=Range$
  1168.     Call IO.O
  1169.     Exit Sub
  1170.  Endif
  1171.  Graphics.Off=True
  1172.  Do While Message.Length<19
  1173.     Word.Wrap=True
  1174.     Strng="?"
  1175.     Call IO.I
  1176.     Word.Wrap=False
  1177.     If No.Input Then
  1178.        Exit Do
  1179.     Endif
  1180.     For Temp1=Message.Length To Temp Step -1
  1181.        Temp.ArrayS(Temp1+1)=Temp.ArrayS(Temp1)
  1182.     Next
  1183.     Out2=Rtrim$(Out2)
  1184.     Out2=Left$(Out2,79)
  1185.     Temp.ArrayS(Temp)=Out2
  1186.     Temp=Temp+1
  1187.     Message.Length=Message.Length+1
  1188.  Loop
  1189.  Graphics.Off=False
  1190.  If Message.Length=19 Then
  1191.     Strng="Message buffer full."
  1192.     Call IO.O
  1193.  Endif
  1194. 10211
  1195.  Exit Sub
  1196. 10212
  1197.  Resume 10211
  1198. End Sub
  1199.  
  1200. Sub List.Lines
  1201.  On Local Error Goto 10222
  1202.  Line.Length=1
  1203.  No.Input.Out="Y"
  1204.  Strng="Display line numbers(y/n)?"
  1205.  Call IO.I
  1206.  If Yes Then
  1207.     TempX=True
  1208.  Else
  1209.     TempX=False
  1210.  Endif
  1211.  Graphics.Off=True
  1212.  For Temp=1 To Message.Length
  1213.     Strng=Nul
  1214.     If TempX Then
  1215.        Strng=Right$(Str$(Temp+10),1)+":"
  1216.     Endif
  1217.     Strng=Strng+Temp.ArrayS(Temp)
  1218.     Strng=Left$(Strng,79)
  1219.     Call IO.O
  1220.  Next
  1221. 10221
  1222.  Exit Sub
  1223. 10222
  1224.  Resume 10221
  1225. End Sub
  1226.