home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 005 / pobtop01.zip / POBTOP.PPE (.txt) < prev   
PCBoard Programming Language Executable  |  1994-09-15  |  17KB  |  882 lines

  1. ;------------------------------------------------------------------------------
  2. ;                                                   .ss.
  3. ;                                                   `²²'
  4. ;             .,sS$Ss,,s$  .,sS$$$Ss.  .,sS$Ss,,s$ .ss.  .sSs.
  5. ;           .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
  6. ;           $$$'   .$$$' $$$²Sçsµ²' .$$$'   .$$$'.$$$' .$$$'  `$$b.
  7. ;           $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$'    ;$$$
  8. ;           `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
  9. ;                                    .sS²°$$$²²°"'       d²°'
  10. ;                                  .$$²  .$$'
  11. ;                                  $$$.,d$$'
  12. ;                                  `²S$$S²'
  13. ;------------------------------------------------------------------------------
  14. ; P.P.L.X. 2.OO                          (C)1996 - Lone Runner / AEGiS CoRP'96 
  15. ;------------------------------------------------------------------------------
  16. ; PPE 3.O1 (Encryption type I) - Analysis ON - Postprocessing ON
  17. ;------------------------------------------------------------------------------
  18.  
  19.     Boolean  BOOLEAN001
  20.     Boolean  BOOLEAN002
  21.     Boolean  BOOLEAN003
  22.     Boolean  BOOLEAN004
  23.     Boolean  BOOLEAN005
  24.     Boolean  BOOLEAN006
  25.     Boolean  BOOLEAN007
  26.     DWord    DWORD001
  27.     DWord    DWORD002
  28.     DWord    TDWORD003(50)
  29.     DWord    DWORD004
  30.     DWord    TDWORD005(50)
  31.     DWord    TDWORD006(50)
  32.     DWord    TDWORD007(50)
  33.     DWord    TDWORD008(100)
  34.     DWord    TDWORD009(100)
  35.     DWord    TDWORD010(100)
  36.     DWord    TDWORD011(50)
  37.     DWord    TDWORD012(50)
  38.     DWord    TDWORD013(50)
  39.     DWord    TDWORD014(50)
  40.     DWord    TDWORD015(50)
  41.     DWord    TDWORD016(50)
  42.     DWord    TDWORD017(50)
  43.     DWord    TDWORD018(50)
  44.     DWord    TDWORD019(1)
  45.     DWord    TDWORD020(1)
  46.     DWord    TDWORD021(1)
  47.     DWord    TDWORD022(1)
  48.     DWord    TDWORD023(1)
  49.     DWord    TDWORD024(1)
  50.     DWord    TDWORD025(1)
  51.     Date     DATE001
  52.     Integer  INTEGER001
  53.     Integer  INTEGER002
  54.     Integer  INTEGER003
  55.     Integer  INTEGER004
  56.     Integer  INTEGER005
  57.     Integer  INTEGER006
  58.     Integer  INTEGER007
  59.     Integer  INTEGER008
  60.     Integer  INTEGER009
  61.     String   STRING001
  62.     String   STRING002
  63.     String   STRING003
  64.     String   STRING004
  65.     String   STRING005
  66.     String   STRING006
  67.     String   STRING007
  68.     String   STRING008
  69.     String   STRING009
  70.     String   STRING010
  71.     String   STRING011
  72.     String   STRING012
  73.     String   STRING013
  74.     String   STRING014
  75.     String   STRING015
  76.     String   STRING016
  77.     String   STRING017
  78.     String   STRING018
  79.     Int      INT001
  80.     Int      INT002
  81.     Int      INT003
  82.     Int      INT004
  83.     BigStr   BIGSTR001
  84.     Double   DOUBLE001
  85.     Double   DOUBLE002
  86.     Double   DOUBLE003
  87.     Double   DOUBLE004
  88.     Double   DOUBLE005
  89.     Double   DOUBLE006
  90.     Double   DOUBLE007
  91.  
  92. ;------------------------------------------------------------------------------
  93.  
  94.     DOUBLE002 = DOUBLE002 / DOUBLE002
  95.     STRING007 = PPEPath() + "graph\updat"
  96.     STRING002 = PPEPath() + "pobtop.cfg"
  97.     STRING005 = PPEPath() + "pobtop.exc"
  98.     STRING018 = ReadLine(STRING002, 13)
  99.     STRING001 = "@X08BULLETIN created via POBTOP.PPE v0.01 - POB(@X0Ac@X08)1994 - German PCBoard Distributor"
  100.     DispStr STRING018
  101.     If (OnLocal()) Goto LABEL001
  102.     CdChkOff
  103.     DtrOff
  104.     Delay 9
  105.     DtrOn
  106.     :LABEL001
  107.     FreshLine
  108.     PrintLn ""
  109.     PrintLn ""
  110.     PrintLn "      @X08┌─────────────────────────────────@X0FPOBTop [PPE3] v0.01ß @X08POB(@X0Ac@X08)1994─┐"
  111.     PrintLn "@X08      │  This PPE3 is only for PCBoard 15.2, compiled with PPLC 3.01    │"
  112.     PrintLn "      │  This PPE3 is *FREEWARE* from the GERMAN PCBoard Distributor    │"
  113.     PrintLn "@X08      │  Call our <*-POB-SUPPORT-BBS-*> in Germany to order PCboard     │"
  114.     PrintLn "      │  FIDONODE-ADDR. 2:2480/5678 (ZYXEL19200) * 2:2480/567 (ISDN)    │"
  115.     PrintLn "@X08      │          10 Lines 14400 - 64000 cps (Modem & ISDN)              │"
  116.     PrintLn "      │      Ringdown 14400 - 28800 V34 USR   +49-(0)8807-91881         │"
  117.     PrintLn "      │      ISDN ELSA CAPI 64000 X75         +49-(0)8807-93337         │"
  118.     PrintLn "      │      ISDN Blaster 64000 X75/V110      +49-(0)8807-93338         │"
  119.     PrintLn "      └─────────────────────────────────────────────────────────────────┘"
  120.     PrintLn ""
  121.     INTEGER001 = ReadLine(STRING002, 1)
  122.     STRING017 = ReadLine(STRING002, 12)
  123.     BOOLEAN002 = 1
  124.     BOOLEAN003 = 1
  125.     BOOLEAN004 = 1
  126.     BOOLEAN005 = 1
  127.     BOOLEAN006 = 1
  128.     INT002 = 1
  129.     If (TokCount() <> 0) Then
  130.         While (1) Do
  131.             STRING003 = GetToken()
  132.             If (STRING003 == "") Break
  133.             If (Left(STRING003, 1) == "/") Then
  134.                 STRING003 = Mid(STRING003, 2, Len(STRING003) - 1)
  135.                 If (STRING003 == "NOBUL") Then
  136.                     BOOLEAN002 = 0
  137.                     Goto LABEL002
  138.                 Endif
  139.                 If (STRING003 == "NOFUL") Then
  140.                     BOOLEAN003 = 0
  141.                     Goto LABEL002
  142.                 Endif
  143.                 If (STRING003 == "NOBDL") Then
  144.                     BOOLEAN004 = 0
  145.                     Goto LABEL002
  146.                 Endif
  147.                 If (STRING003 == "NOFDL") Then
  148.                     BOOLEAN005 = 0
  149.                     Goto LABEL002
  150.                 Endif
  151.                 If (STRING003 == "NOCALLS") Then
  152.                     BOOLEAN006 = 0
  153.                     Goto LABEL002
  154.                 Endif
  155.                 Goto LABEL023
  156.                 :LABEL002
  157.                 Continue
  158.             Endif
  159.             For INTEGER002 = 1 To Len(STRING003)
  160.                 STRING004 = Mid(STRING003, INTEGER002, 1)
  161.                 If ((STRING004 < "0") || (STRING004 > "9")) Goto LABEL023
  162.             Next
  163.             INT002 = ToInteger(STRING003)
  164.         EndWhile
  165.     Endif
  166.     STRING008 = PPEPath() + "lastrun"
  167.     If (Exist(STRING008)) Then
  168.         DATE001 = ToDate(ReadLine(STRING008, 1))
  169.         FClose -1
  170.         If (ToInteger(DATE001) + INT002 <= ToInteger(Date())) Then
  171.             FCreate 1, STRING008, 1, 0
  172.             FPutLn 1, Date()
  173.             FClose 1
  174.         Else
  175.             End
  176.         Endif
  177.     Else
  178.         FCreate 1, STRING008, 1, 3
  179.         FPutLn 1, Date()
  180.         FClose 1
  181.     Endif
  182.     If (INTEGER001 > 50) Then
  183.         PrintLn "Sorry, but you can enter a maximum of 50 top top down/uploaders"
  184.         End
  185.     Endif
  186.     INTEGER008 = 100
  187.     Redim TDWORD019, INTEGER008
  188.     Redim TDWORD022, INTEGER008
  189.     Redim TDWORD020, INTEGER008
  190.     Redim TDWORD021, INTEGER008
  191.     Redim TDWORD023, INTEGER008
  192.     Redim TDWORD024, INTEGER008
  193.     Redim TDWORD025, INTEGER008
  194.     BOOLEAN001 = 1
  195.     DWORD001 = INTEGER001
  196.     FreshLine
  197.     FreshLine
  198.     Print "@X08POB @X07Reading User exclusion file"
  199.     FOpen 1, STRING005, 0, 0
  200.     FRead 1, BIGSTR001, 2048
  201.     If (Ferr(1)) Goto LABEL003
  202.     FreshLine
  203.     Print "@X0DExclusion string exhausted, no additions possible"
  204.     :LABEL003
  205.     FClose 1
  206.     FreshLine
  207.     Print "@X08POB @X07sorting Users "
  208.     INTEGER006 = GetX()
  209.     INTEGER007 = GetY()
  210.     BOOLEAN007 = 1
  211.     INTEGER009 = 0
  212.     DWORD004 = 1
  213.     While (1) Do
  214.         For INTEGER003 = 1 To INTEGER008
  215.             :LABEL004
  216.             GetAltUser DWORD004
  217.             If (CurUser() == -1) Then
  218.                 For INTEGER002 = INTEGER003 To INTEGER008
  219.                     TDWORD019(INTEGER002) = 0
  220.                     TDWORD022(INTEGER002) = 0
  221.                     TDWORD023(INTEGER002) = 0
  222.                     TDWORD024(INTEGER002) = 0
  223.                     TDWORD025(INTEGER002) = 0
  224.                     TDWORD020(INTEGER002) = 0
  225.                 Next
  226.                 Break
  227.             Endif
  228.             If (InStr(BIGSTR001, """" + Upper(U_Name()) + """")) Then
  229.                 Inc DWORD004
  230.                 Goto LABEL004
  231.             Endif
  232.             TDWORD019(INTEGER003) = U_Bul()
  233.             DOUBLE003 = DOUBLE003 + TDWORD019(INTEGER003)
  234.             TDWORD022(INTEGER003) = U_Ful()
  235.             DOUBLE004 = DOUBLE004 + TDWORD022(INTEGER003)
  236.             TDWORD023(INTEGER003) = U_Logons()
  237.             DOUBLE007 = DOUBLE007 + TDWORD023(INTEGER003)
  238.             TDWORD020(INTEGER003) = DWORD004
  239.             TDWORD024(INTEGER003) = U_Bdl()
  240.             DOUBLE005 = DOUBLE005 + TDWORD024(INTEGER003)
  241.             TDWORD025(INTEGER003) = U_Fdl()
  242.             DOUBLE006 = DOUBLE006 + TDWORD025(INTEGER003)
  243.             AnsiPos INTEGER006, INTEGER007
  244.             Print "@X08POB [@X0F", String(DWORD004), "@X08]"
  245.             Inc DWORD004
  246.         Next
  247.         If (BOOLEAN002) Then
  248.             Gosub LABEL005
  249.             AnsiPos INTEGER006, INTEGER007
  250.             Print "[@X07MERGING No: 1@X08]"
  251.             If (!BOOLEAN007) Gosub LABEL012
  252.         Endif
  253.         If (BOOLEAN003) Then
  254.             Gosub LABEL009
  255.             AnsiPos INTEGER006, INTEGER007
  256.             Print "@X08[@X07MERGING No: 2@X08]"
  257.             If (!BOOLEAN007) Gosub LABEL013
  258.         Endif
  259.         If (BOOLEAN006) Then
  260.             Gosub LABEL010
  261.             AnsiPos INTEGER006, INTEGER007
  262.             Print "@X08[@X07MERGING No: 3@X08]"
  263.             If (!BOOLEAN007) Gosub LABEL014
  264.         Endif
  265.         If (BOOLEAN004) Then
  266.             Gosub LABEL006
  267.             AnsiPos INTEGER006, INTEGER007
  268.             Print "@X08[@X07MERGING No: 4@X08]"
  269.             If (!BOOLEAN007) Gosub LABEL011
  270.         Endif
  271.         If (BOOLEAN005) Then
  272.             Gosub LABEL007
  273.             AnsiPos INTEGER006, INTEGER007
  274.             Print "@X08[@X07MERGING No: 5@X08]"
  275.             If (!BOOLEAN007) Gosub LABEL008
  276.         Endif
  277.         BOOLEAN007 = 0
  278.         AnsiPos INTEGER006, INTEGER007
  279.         Print "              "
  280.         If (CurUser() == -1) Break
  281.     EndWhile
  282.     StartDisp 2
  283.     FreshLine
  284.     PrintLn "@X08POB  @X07Create Bulletins"
  285.     INTEGER006 = GetX()
  286.     INTEGER007 = GetY()
  287.     If (BOOLEAN002) Then
  288.         PrintLn "@X08POB [@X07Top Uploaders @X09BYTES@X08]  "
  289.         Gosub LABEL015
  290.     Endif
  291.     If (BOOLEAN003) Then
  292.         PrintLn "@X08POB [@X07Top Uploaders @X09FILES@X08]  "
  293.         Gosub LABEL016
  294.     Endif
  295.     If (BOOLEAN004) Then
  296.         PrintLn "@X08POB [@X07Top Downloaders @X09BYTES@X08]"
  297.         Gosub LABEL017
  298.     Endif
  299.     If (BOOLEAN005) Then
  300.         PrintLn "@X08POB [@X07Top Downloaders @X09FILES@X08]"
  301.         Gosub LABEL018
  302.     Endif
  303.     If (BOOLEAN006) Then
  304.         PrintLn "@X08POB [@X07Top Callers@X08]"
  305.         Gosub LABEL019
  306.     Endif
  307.     PrintLn "@X08POB [@X07Ready!@X08]"
  308.     PrintLn "─────────────────────────────────────────────────────────────POB(@X0Ac@X08)1994──────"
  309.     Log "Bulletins created with POBTOP.PPE - POB(c)1994", 0
  310.     Delay 9
  311.     End
  312.     :LABEL005
  313.     Sort TDWORD019, TDWORD021
  314.     INTEGER005 = 1
  315.     For INTEGER004 = INTEGER008 To INTEGER008 - DWORD001 + 1 Step -1
  316.         If (BOOLEAN007) Then
  317.             TDWORD006(INTEGER005) = TDWORD019(TDWORD021(INTEGER004))
  318.             TDWORD007(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  319.         Else
  320.             TDWORD003(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  321.             TDWORD005(INTEGER005) = TDWORD019(TDWORD021(INTEGER004))
  322.         Endif
  323.         Inc INTEGER005
  324.     Next
  325.     Return
  326.     :LABEL006
  327.     Sort TDWORD024, TDWORD021
  328.     INTEGER005 = 1
  329.     For INTEGER004 = INTEGER008 To INTEGER008 - DWORD001 + 1 Step -1
  330.         If (BOOLEAN007) Then
  331.             TDWORD015(INTEGER005) = TDWORD024(TDWORD021(INTEGER004))
  332.             TDWORD016(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  333.         Else
  334.             TDWORD003(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  335.             TDWORD005(INTEGER005) = TDWORD024(TDWORD021(INTEGER004))
  336.         Endif
  337.         Inc INTEGER005
  338.     Next
  339.     Return
  340.     :LABEL007
  341.     Sort TDWORD025, TDWORD021
  342.     INTEGER005 = 1
  343.     For INTEGER004 = INTEGER008 To INTEGER008 - DWORD001 + 1 Step -1
  344.         If (BOOLEAN007) Then
  345.             TDWORD017(INTEGER005) = TDWORD025(TDWORD021(INTEGER004))
  346.             TDWORD018(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  347.         Else
  348.             TDWORD003(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  349.             TDWORD005(INTEGER005) = TDWORD025(TDWORD021(INTEGER004))
  350.         Endif
  351.         Inc INTEGER005
  352.     Next
  353.     Return
  354.     :LABEL008
  355.     For INTEGER004 = 1 To INTEGER001
  356.         TDWORD008(INTEGER004) = TDWORD005(INTEGER004)
  357.         TDWORD009(INTEGER004) = TDWORD003(INTEGER004)
  358.     Next
  359.     For INTEGER004 = INTEGER001 + 1 To INTEGER001 + INTEGER001
  360.         TDWORD008(INTEGER004) = TDWORD017(INTEGER004 - INTEGER001)
  361.         TDWORD009(INTEGER004) = TDWORD018(INTEGER004 - INTEGER001)
  362.     Next
  363.     Sort TDWORD008, TDWORD010
  364.     INTEGER005 = 1
  365.     For INTEGER004 = 100 To 100 - DWORD001 + 1 Step -1
  366.         TDWORD017(INTEGER005) = TDWORD008(TDWORD010(INTEGER004))
  367.         TDWORD018(INTEGER005) = TDWORD009(TDWORD010(INTEGER004))
  368.         Inc INTEGER005
  369.     Next
  370.     Return
  371.     :LABEL009
  372.     Sort TDWORD022, TDWORD021
  373.     INTEGER005 = 1
  374.     For INTEGER004 = INTEGER008 To INTEGER008 - DWORD001 + 1 Step -1
  375.         If (BOOLEAN007) Then
  376.             TDWORD011(INTEGER005) = TDWORD022(TDWORD021(INTEGER004))
  377.             TDWORD012(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  378.         Else
  379.             TDWORD003(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  380.             TDWORD005(INTEGER005) = TDWORD022(TDWORD021(INTEGER004))
  381.         Endif
  382.         Inc INTEGER005
  383.     Next
  384.     Return
  385.     :LABEL010
  386.     Sort TDWORD023, TDWORD021
  387.     INTEGER005 = 1
  388.     For INTEGER004 = INTEGER008 To INTEGER008 - DWORD001 + 1 Step -1
  389.         If (BOOLEAN007) Then
  390.             TDWORD013(INTEGER005) = TDWORD023(TDWORD021(INTEGER004))
  391.             TDWORD014(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  392.         Else
  393.             TDWORD003(INTEGER005) = TDWORD020(TDWORD021(INTEGER004))
  394.             TDWORD005(INTEGER005) = TDWORD023(TDWORD021(INTEGER004))
  395.         Endif
  396.         Inc INTEGER005
  397.     Next
  398.     Return
  399.     :LABEL011
  400.     For INTEGER004 = 1 To INTEGER001
  401.         TDWORD008(INTEGER004) = TDWORD005(INTEGER004)
  402.         TDWORD009(INTEGER004) = TDWORD003(INTEGER004)
  403.     Next
  404.     For INTEGER004 = INTEGER001 + 1 To INTEGER001 + INTEGER001
  405.         TDWORD008(INTEGER004) = TDWORD015(INTEGER004 - INTEGER001)
  406.         TDWORD009(INTEGER004) = TDWORD016(INTEGER004 - INTEGER001)
  407.     Next
  408.     Sort TDWORD008, TDWORD010
  409.     INTEGER005 = 1
  410.     For INTEGER004 = 100 To 100 - DWORD001 + 1 Step -1
  411.         TDWORD015(INTEGER005) = TDWORD008(TDWORD010(INTEGER004))
  412.         TDWORD016(INTEGER005) = TDWORD009(TDWORD010(INTEGER004))
  413.         Inc INTEGER005
  414.     Next
  415.     Return
  416.     :LABEL012
  417.     For INTEGER004 = 1 To INTEGER001
  418.         TDWORD008(INTEGER004) = TDWORD005(INTEGER004)
  419.         TDWORD009(INTEGER004) = TDWORD003(INTEGER004)
  420.     Next
  421.     For INTEGER004 = INTEGER001 + 1 To INTEGER001 + INTEGER001
  422.         TDWORD008(INTEGER004) = TDWORD006(INTEGER004 - INTEGER001)
  423.         TDWORD009(INTEGER004) = TDWORD007(INTEGER004 - INTEGER001)
  424.     Next
  425.     Sort TDWORD008, TDWORD010
  426.     INTEGER005 = 1
  427.     For INTEGER004 = 100 To 100 - DWORD001 + 1 Step -1
  428.         TDWORD006(INTEGER005) = TDWORD008(TDWORD010(INTEGER004))
  429.         TDWORD007(INTEGER005) = TDWORD009(TDWORD010(INTEGER004))
  430.         Inc INTEGER005
  431.     Next
  432.     Return
  433.     :LABEL013
  434.     For INTEGER004 = 1 To INTEGER001
  435.         TDWORD008(INTEGER004) = TDWORD005(INTEGER004)
  436.         TDWORD009(INTEGER004) = TDWORD003(INTEGER004)
  437.     Next
  438.     For INTEGER004 = INTEGER001 + 1 To INTEGER001 + INTEGER001
  439.         TDWORD008(INTEGER004) = TDWORD011(INTEGER004 - INTEGER001)
  440.         TDWORD009(INTEGER004) = TDWORD012(INTEGER004 - INTEGER001)
  441.     Next
  442.     Sort TDWORD008, TDWORD010
  443.     INTEGER005 = 1
  444.     For INTEGER004 = 100 To 100 - DWORD001 + 1 Step -1
  445.         TDWORD011(INTEGER005) = TDWORD008(TDWORD010(INTEGER004))
  446.         TDWORD012(INTEGER005) = TDWORD009(TDWORD010(INTEGER004))
  447.         Inc INTEGER005
  448.     Next
  449.     Return
  450.     :LABEL014
  451.     For INTEGER004 = 1 To INTEGER001
  452.         TDWORD008(INTEGER004) = TDWORD005(INTEGER004)
  453.         TDWORD009(INTEGER004) = TDWORD003(INTEGER004)
  454.     Next
  455.     For INTEGER004 = INTEGER001 + 1 To INTEGER001 + INTEGER001
  456.         TDWORD008(INTEGER004) = TDWORD013(INTEGER004 - INTEGER001)
  457.         TDWORD009(INTEGER004) = TDWORD014(INTEGER004 - INTEGER001)
  458.     Next
  459.     Sort TDWORD008, TDWORD010
  460.     INTEGER005 = 1
  461.     For INTEGER004 = 100 To 100 - DWORD001 + 1 Step -1
  462.         TDWORD013(INTEGER005) = TDWORD008(TDWORD010(INTEGER004))
  463.         TDWORD014(INTEGER005) = TDWORD009(TDWORD010(INTEGER004))
  464.         Inc INTEGER005
  465.     Next
  466.     Return
  467.     :LABEL015
  468.     Tokenize ReadLine(STRING002, 2)
  469.     STRING012 = GetToken()
  470.     DOUBLE002 = GetToken()
  471.     STRING013 = ""
  472.     For INTEGER002 = 1 To ToInteger(DOUBLE002)
  473.         STRING013 = STRING013 + STRING012
  474.     Next
  475.     DOUBLE002 = DOUBLE002 / DOUBLE002
  476.     FOpen 1, PPEPath() + "graph\bupTOP", 2, 0
  477.     FCreate 2, PPEPath() + "BYTEUP", 1, 2
  478.     While (1) Do
  479.         FGet 1, STRING009
  480.         If (Ferr(1)) Break
  481.         FPutLn 2, STRING009
  482.     EndWhile
  483.     FClose 1
  484.     STRING009 = ReadLine(STRING002, 3)
  485.     For INTEGER004 = 1 To INTEGER001
  486.         STRING010 = STRING009
  487.         If (TDWORD006(INTEGER004) == 0) Break
  488.         GetAltUser TDWORD007(INTEGER004)
  489.         Gosub LABEL020
  490.         DOUBLE001 = ToDouble((ToDWord(U_Bul()) / ToDouble(DOUBLE003)) * STRING017)
  491.         STRING010 = ReplaceStr(STRING010, "%PERCENT%", FmtReal(DOUBLE001, 5, 2))
  492.         DWORD002 = DOUBLE001 * DOUBLE002 + DOUBLE001 * DOUBLE002
  493.         STRING011 = Left(STRING013, DWORD002) + STRING012
  494.         STRING010 = ReplaceStr(STRING010, "%RATING%", STRING011)
  495.         FPutLn 2, STRING010
  496.     Next
  497.     FOpen 1, PPEPath() + "graph\bupbot", 2, 0
  498.     While (1) Do
  499.         FGet 1, STRING009
  500.         If (InStr(STRING009, "T%")) Then
  501.             Gosub LABEL024
  502.         Endif
  503.         If (Ferr(1)) Break
  504.         FPutLn 2, STRING009
  505.     EndWhile
  506.     FClose 1
  507.     FPutLn 2, STRING001
  508.     FClose 2
  509.     Return
  510.     :LABEL016
  511.     Tokenize ReadLine(STRING002, 4)
  512.     STRING012 = GetToken()
  513.     DOUBLE002 = GetToken()
  514.     STRING013 = ""
  515.     For INTEGER002 = 1 To ToInteger(DOUBLE002)
  516.         STRING013 = STRING013 + STRING012
  517.     Next
  518.     DOUBLE002 = DOUBLE002 / DOUBLE002
  519.     FOpen 1, PPEPath() + "graph\fupTOP", 2, 0
  520.     FCreate 2, PPEPath() + "FILEUP", 1, 2
  521.     While (1) Do
  522.         FGet 1, STRING009
  523.         If (Ferr(1)) Break
  524.         FPutLn 2, STRING009
  525.     EndWhile
  526.     FClose 1
  527.     STRING009 = ReadLine(STRING002, 5)
  528.     For INTEGER004 = 1 To INTEGER001
  529.         STRING010 = STRING009
  530.         If (TDWORD011(INTEGER004) == 0) Break
  531.         GetAltUser TDWORD012(INTEGER004)
  532.         Gosub LABEL020
  533.         DOUBLE001 = ToDouble((ToDWord(U_Ful()) / ToDouble(DOUBLE004)) * STRING017)
  534.         STRING010 = ReplaceStr(STRING010, "%PERCENT%", FmtReal(DOUBLE001, 5, 2))
  535.         DWORD002 = ToInteger(DOUBLE001 * DOUBLE002 + DOUBLE001 * DOUBLE002)
  536.         STRING011 = Left(STRING013, DWORD002) + STRING012
  537.         STRING010 = ReplaceStr(STRING010, "%RATING%", STRING011)
  538.         FPutLn 2, STRING010
  539.     Next
  540.     FOpen 1, PPEPath() + "graph\fupbot", 2, 0
  541.     While (1) Do
  542.         FGet 1, STRING009
  543.         If (InStr(STRING009, "T%")) Then
  544.             Gosub LABEL024
  545.         Endif
  546.         If (Ferr(1)) Break
  547.         FPutLn 2, STRING009
  548.     EndWhile
  549.     FClose 1
  550.     FPutLn 2, STRING001
  551.     FClose 2
  552.     Return
  553.     :LABEL017
  554.     Tokenize ReadLine(STRING002, 6)
  555.     STRING012 = GetToken()
  556.     DOUBLE002 = GetToken()
  557.     STRING013 = ""
  558.     For INTEGER002 = 1 To ToInteger(DOUBLE002)
  559.         STRING013 = STRING013 + STRING012
  560.     Next
  561.     DOUBLE002 = DOUBLE002 / DOUBLE002
  562.     FOpen 1, PPEPath() + "graph\bdlTOP", 2, 0
  563.     FCreate 2, PPEPath() + "BYTEDOWN", 1, 2
  564.     While (1) Do
  565.         FGet 1, STRING009
  566.         If (Ferr(1)) Break
  567.         FPutLn 2, STRING009
  568.     EndWhile
  569.     FClose 1
  570.     STRING009 = ReadLine(STRING002, 7)
  571.     For INTEGER004 = 1 To INTEGER001
  572.         STRING010 = STRING009
  573.         If (TDWORD015(INTEGER004) == 0) Break
  574.         GetAltUser TDWORD016(INTEGER004)
  575.         Gosub LABEL020
  576.         DOUBLE001 = ToDouble((ToDWord(U_Bdl()) / ToDouble(DOUBLE005)) * STRING017)
  577.         STRING010 = ReplaceStr(STRING010, "%PERCENT%", FmtReal(DOUBLE001, 5, 2))
  578.         DWORD002 = ToInteger(DOUBLE001 * DOUBLE002 + DOUBLE001 * DOUBLE002)
  579.         STRING011 = Left(STRING013, DWORD002) + STRING012
  580.         STRING010 = ReplaceStr(STRING010, "%RATING%", STRING011)
  581.         FPutLn 2, STRING010
  582.     Next
  583.     FOpen 1, PPEPath() + "graph\bdlbot", 2, 0
  584.     While (1) Do
  585.         FGet 1, STRING009
  586.         If (InStr(STRING009, "T%")) Then
  587.             Gosub LABEL024
  588.         Endif
  589.         If (Ferr(1)) Break
  590.         FPutLn 2, STRING009
  591.     EndWhile
  592.     FClose 1
  593.     FPutLn 2, STRING001
  594.     FClose 2
  595.     Return
  596.     :LABEL018
  597.     Tokenize ReadLine(STRING002, 8)
  598.     STRING012 = GetToken()
  599.     DOUBLE002 = GetToken()
  600.     STRING013 = ""
  601.     For INTEGER002 = 1 To ToInteger(DOUBLE002)
  602.         STRING013 = STRING013 + STRING012
  603.     Next
  604.     DOUBLE002 = DOUBLE002 / DOUBLE002
  605.     FOpen 1, PPEPath() + "graph\fdlTOP", 2, 0
  606.     FCreate 2, PPEPath() + "FILEDOWN", 1, 2
  607.     While (1) Do
  608.         FGet 1, STRING009
  609.         If (Ferr(1)) Break
  610.         FPutLn 2, STRING009
  611.     EndWhile
  612.     FClose 1
  613.     STRING009 = ReadLine(STRING002, 9)
  614.     For INTEGER004 = 1 To INTEGER001
  615.         STRING010 = STRING009
  616.         If (TDWORD017(INTEGER004) == 0) Break
  617.         GetAltUser TDWORD018(INTEGER004)
  618.         Gosub LABEL020
  619.         DOUBLE001 = ToDouble((ToDWord(U_Fdl()) / ToDouble(DOUBLE006)) * STRING017)
  620.         STRING010 = ReplaceStr(STRING010, "%PERCENT%", FmtReal(DOUBLE001, 5, 2))
  621.         DWORD002 = ToInteger(DOUBLE001 * DOUBLE002 + DOUBLE001 * DOUBLE002)
  622.         STRING011 = Left(STRING013, DWORD002) + STRING012
  623.         STRING010 = ReplaceStr(STRING010, "%RATING%", STRING011)
  624.         FPutLn 2, STRING010
  625.     Next
  626.     FOpen 1, PPEPath() + "graph\fdlbot", 2, 0
  627.     While (1) Do
  628.         FGet 1, STRING009
  629.         If (InStr(STRING009, "T%")) Then
  630.             Gosub LABEL024
  631.         Endif
  632.         If (Ferr(1)) Break
  633.         FPutLn 2, STRING009
  634.     EndWhile
  635.     FClose 1
  636.     FPutLn 2, STRING001
  637.     FClose 2
  638.     Return
  639.     :LABEL019
  640.     Tokenize ReadLine(STRING002, 10)
  641.     STRING012 = GetToken()
  642.     DOUBLE002 = GetToken()
  643.     STRING013 = ""
  644.     For INTEGER002 = 1 To ToInteger(DOUBLE002)
  645.         STRING013 = STRING013 + STRING012
  646.     Next
  647.     DOUBLE002 = DOUBLE002 / DOUBLE002
  648.     FOpen 1, PPEPath() + "graph\calTOP", 2, 0
  649.     FCreate 2, PPEPath() + "CALLERS", 1, 2
  650.     While (1) Do
  651.         FGet 1, STRING009
  652.         If (Ferr(1)) Break
  653.         FPutLn 2, STRING009
  654.     EndWhile
  655.     FClose 1
  656.     STRING009 = ReadLine(STRING002, 11)
  657.     For INTEGER004 = 1 To INTEGER001
  658.         STRING010 = STRING009
  659.         If (TDWORD013(INTEGER004) == 0) Break
  660.         GetAltUser TDWORD014(INTEGER004)
  661.         Gosub LABEL020
  662.         DOUBLE001 = ToDouble((ToDWord(U_Logons()) / ToDouble(DOUBLE007)) * STRING017)
  663.         STRING010 = ReplaceStr(STRING010, "%PERCENT%", FmtReal(DOUBLE001, 5, 2))
  664.         DWORD002 = ToInteger(DOUBLE001 * DOUBLE002 + DOUBLE001 * DOUBLE002)
  665.         STRING011 = Left(STRING013, DWORD002) + STRING012
  666.         STRING010 = ReplaceStr(STRING010, "%RATING%", STRING011)
  667.         FPutLn 2, STRING010
  668.     Next
  669.     FOpen 1, PPEPath() + "graph\calbot", 2, 0
  670.     While (1) Do
  671.         FGet 1, STRING009
  672.         If (InStr(STRING009, "T%")) Then
  673.             Gosub LABEL024
  674.         Endif
  675.         If (Ferr(1)) Break
  676.         FPutLn 2, STRING009
  677.     EndWhile
  678.     FClose 1
  679.     FPutLn 2, STRING001
  680.     FClose 2
  681.     Return
  682.     :LABEL020
  683.     INT001 = InStr(STRING010, "%NR")
  684.     If (INT001) Then
  685.         STRING015 = "%NR"
  686.         STRING016 = String(INTEGER004)
  687.         Gosub LABEL021
  688.     Endif
  689.     INT001 = InStr(STRING010, "%NAME")
  690.     If (INT001) Then
  691.         STRING015 = "%NAME"
  692.         STRING016 = Mixed(U_Name())
  693.         Gosub LABEL021
  694.     Endif
  695.     INT001 = InStr(STRING010, "%CALLS")
  696.     If (INT001) Then
  697.         STRING015 = "%CALLS"
  698.         STRING016 = ToDWord(U_Logons())
  699.         Gosub LABEL021
  700.     Endif
  701.     INT001 = InStr(STRING010, "%BUL")
  702.     If (INT001) Then
  703.         STRING015 = "%BUL"
  704.         STRING016 = ToDWord(U_Bul()) / ToDWord(1024)
  705.         Gosub LABEL021
  706.     Endif
  707.     INT001 = InStr(STRING010, "%FUL")
  708.     If (INT001) Then
  709.         STRING015 = "%FUL"
  710.         STRING016 = ToDWord(U_Ful())
  711.         Gosub LABEL021
  712.     Endif
  713.     INT001 = InStr(STRING010, "%BDL")
  714.     If (INT001) Then
  715.         STRING015 = "%BDL"
  716.         STRING016 = ToDWord(U_Bdl()) / ToDWord(1024)
  717.         Gosub LABEL021
  718.     Endif
  719.     INT001 = InStr(STRING010, "%FDL")
  720.     If (INT001) Then
  721.         STRING015 = "%FDL"
  722.         STRING016 = ToDWord(U_Fdl())
  723.         Gosub LABEL021
  724.     Endif
  725.     Return
  726.     :LABEL021
  727.     INT004 = Len(STRING015)
  728.     STRING014 = Mid(STRING010, INT001 + INT004, 1)
  729.     Select Case (STRING014)
  730.         Case "%"
  731.             STRING010 = ReplaceStr(STRING010, STRING015 + "%", STRING016)
  732.         Case ":"
  733.             INT003 = INT004 + 1
  734.             STRING006 = ""
  735.             STRING014 = Mid(STRING010, INT001 + INT003, 1)
  736.             While ((STRING014 >= "0") && (STRING014 <= "9")) Do
  737.                 STRING006 = STRING006 + STRING014
  738.                 Inc INT003
  739.                 STRING014 = Mid(STRING010, INT001 + INT003, 1)
  740.             EndWhile
  741.             If (STRING014 == "R") Then
  742.                 STRING010 = ReplaceStr(STRING010, STRING015 + ":" + String(STRING006) + "R%", Right(STRING016, STRING006))
  743.                 Goto LABEL022
  744.             Endif
  745.         Case "%"
  746.             STRING010 = ReplaceStr(STRING010, STRING015 + ":" + String(STRING006) + "%", Left(STRING016, STRING006))
  747.     End Select
  748.     :LABEL022
  749.     Return
  750.     :LABEL023
  751.     PrintLn "Incorrect command parameter (" + STRING003 + ") given, usage is:"
  752.     PrintLn " TOP [NR] [/NOBUL] [/NOFUL] [/NOBDL] [/NOFDL] [/NOCALLS]"
  753.     PrintLn " NR     : Days in between each bulletin(s) generation (default = 1)"
  754.     PrintLn " NOBUL  : Do not generate top bytes uploaded bulletin"
  755.     PrintLn " NOFUL  : Do not generate top files uploaded bulletin"
  756.     PrintLn " NOBDL  : Do not generate top bytes downloaded bulletin"
  757.     PrintLn " NOFDL  : Do not generate top files downloaded bulletin"
  758.     PrintLn " NOCALLS: Do not generate top callers bulletin"
  759.     Wait
  760.     End
  761.     :LABEL024
  762.     STRING009 = ReplaceStr(STRING009, "%BULT%", FmtReal(DOUBLE003 / ToDouble(1024), 0, 0))
  763.     STRING009 = ReplaceStr(STRING009, "%FULT%", FmtReal(DOUBLE004, 0, 0))
  764.     STRING009 = ReplaceStr(STRING009, "%BDLT%", FmtReal(DOUBLE005 / ToDouble(1024), 0, 0))
  765.     STRING009 = ReplaceStr(STRING009, "%FDLT%", FmtReal(DOUBLE006, 0, 0))
  766.     STRING009 = ReplaceStr(STRING009, "%CALLST%", FmtReal(DOUBLE007, 0, 0))
  767.     Return
  768.  
  769. ;------------------------------------------------------------------------------
  770. ;
  771. ; Usage report (before postprocessing)
  772. ;
  773. ; ■ Statements used :
  774. ;
  775. ;    4       End
  776. ;    1       Wait
  777. ;    173     Goto 
  778. ;    275     Let 
  779. ;    10      Print 
  780. ;    30      PrintLn 
  781. ;    114     If 
  782. ;    7       FCreate 
  783. ;    11      FOpen 
  784. ;    19      FClose 
  785. ;    10      FGet 
  786. ;    22      FPutLn 
  787. ;    1       StartDisp 
  788. ;    1       Log 
  789. ;    32      Gosub 
  790. ;    18      Return
  791. ;    1       DtrOn
  792. ;    1       DtrOff
  793. ;    1       CdChkOff
  794. ;    2       Delay 
  795. ;    13      Inc 
  796. ;    5       Tokenize 
  797. ;    1       DispStr 
  798. ;    7       AnsiPos 
  799. ;    6       FreshLine
  800. ;    1       FRead 
  801. ;    7       Redim 
  802. ;    6       GetAltUser 
  803. ;    10      Sort 
  804. ;
  805. ;
  806. ; ■ Functions used :
  807. ;
  808. ;    33      -
  809. ;    15      *
  810. ;    15      /
  811. ;    124     +
  812. ;    31      -
  813. ;    18      ==
  814. ;    1       <>
  815. ;    34      <
  816. ;    35      <=
  817. ;    2       >
  818. ;    67      >=
  819. ;    96      !
  820. ;    67      &&
  821. ;    34      ||
  822. ;    4       Len(
  823. ;    1       Upper()
  824. ;    5       Mid()
  825. ;    7       Left()
  826. ;    1       Right()
  827. ;    11      Ferr()
  828. ;    13      InStr()
  829. ;    3       Date()
  830. ;    2       U_Name()
  831. ;    3       U_Logons()
  832. ;    3       U_Ful()
  833. ;    3       U_Fdl()
  834. ;    3       U_Bdl()
  835. ;    3       U_Bul()
  836. ;    4       String()
  837. ;    19      PPEPath()
  838. ;    14      ReadLine()
  839. ;    1       OnLocal()
  840. ;    11      GetToken()
  841. ;    1       Exist()
  842. ;    2       GetX()
  843. ;    2       GetY()
  844. ;    1       TokCount()
  845. ;    18      ReplaceStr()
  846. ;    1       ToDate()
  847. ;    12      ToDouble()
  848. ;    17      ToInteger()
  849. ;    12      ToDWord()
  850. ;    1       Mixed()
  851. ;    2       CurUser()
  852. ;    10      FmtReal()
  853. ;
  854. ;------------------------------------------------------------------------------
  855. ;
  856. ; Analysis flags : RB
  857. ;
  858. ; R - Read user ■ 5
  859. ;     User records are read, this may signify that someone wants to get
  860. ;     various informations about a user (for example his password), but
  861. ;     this may also be normal for a program accessing user records (for
  862. ;     example a User Editor)
  863. ;     ■ Search for : GETALTUSER
  864. ;
  865. ; B - Brute hangup ■ 1
  866. ;     Program hangup without notification. This may be a good way to
  867. ;     disconnect a user, but if used randomly, may be very nasty
  868. ;     ■ Search for : HANGUP, DTROFF
  869. ;
  870. ;------------------------------------------------------------------------------
  871. ;
  872. ; Postprocessing report
  873. ;
  874. ;    33      For/Next
  875. ;    13      While/EndWhile
  876. ;    40      If/Then or If/Then/Else
  877. ;    1       Select Case
  878. ;
  879. ;------------------------------------------------------------------------------
  880. ;                 AEGiS Corp - Break the routines, code against the machines!
  881. ;------------------------------------------------------------------------------
  882.