From e08455c69aec1587198bd9270420d3a557d141ab Mon Sep 17 00:00:00 2001 From: mysticbbs Date: Sun, 15 Jul 2012 16:13:17 -0400 Subject: [PATCH] Initial import usage graph MPL --- scripts/usage.mps | 134 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 scripts/usage.mps diff --git a/scripts/usage.mps b/scripts/usage.mps new file mode 100644 index 0000000..90dfa58 --- /dev/null +++ b/scripts/usage.mps @@ -0,0 +1,134 @@ +// ========================================================================== +// USAGE.MPS : On the fly usage graph calculation for Mystic BBS v1.10+ +// Author : g00r00 +// Version : 1.0 +// License : Part of with Mystic BBS distribution / GPL repository +// -------------------------------------------------------------------------- +// +// This MPL calculates a monthly usage graph based on the BBS history data +// file. Simply copy it to the scripts directory, compile it and execute it +// from your menu with the GX menu command (optional data 'usage'). +// +// I may continue to add different types of graphs in the future. The latest +// version can be found on Mystic BBS sourceforge page. +// +// ========================================================================== + +Uses CFG + +Const + fmRWDN = 66; + +Type + RecHistory = Record // from records.pas 1.10 + Date : LongInt; + Emails : Word; + Posts : Word; + Downloads : Word; + Uploads : Word; + DownloadKB : LongInt; + UploadKB : LongInt; + Calls : LongInt; + NewUsers : Word; + Telnet : Word; + FTP : Word; + POP3 : Word; + SMTP : Word; + NNTP : Word; + HTTP : Word; + Reserved : Array[1..26] of Byte; + End; + +Function DisplayMonthly : Boolean; +Var + HistFile : File; + Days : Cardinal; + OneDay : RecHistory; + Months : Array[1..12] of Cardinal; + CurMonth : Byte; + TotalCalls : Cardinal; + Loop1 : Byte; + Loop2 : Byte; + + Procedure DrawBar (XPos, Value: Byte); + Var + Temp : Byte; + Begin + Write ('|01'); + + For Temp := 1 to Value Do Begin + GotoXY (XPos, 18 - Temp); + Write (#219 + #219 + #219); + End; + End; + +Begin + DisplayMonthly := False; + + fAssign (HistFile, CfgDataPath + 'history.dat', fmRWDN); + fReset (HistFile); + + If IoResult <> 0 Then Exit; + + If fSize(HistFile) = 0 Then Begin + WriteLn ('|CRNo BBS history to calculate|CR|CR|PA'); + Halt; + End; + + Days := fSize(HistFile) / SizeOf(OneDay); + + WriteLn ('|16|CL|15Calculating Monthly usage (' + strComma(Days) + ' days)...'); + + While Not fEof(HistFile) Do Begin + fReadRec(HistFile, OneDay); + + CurMonth := Str2Int(Copy(DateStr(OneDay.Date, 1), 1, 2)); + Months[CurMonth] := Months[CurMonth] + OneDay.Calls; + TotalCalls := TotalCalls + OneDay.Calls; + End; + + fClose (HistFile); + + For Loop1 := 1 to 12 Do Begin + If Months[Loop1] > 0 Then + Months[Loop1] := Months[Loop1] / TotalCalls * 15 + Else + Months[Loop1] := 1; + End; + + WriteLn ('|CL|09|17 ' + #176 + ' |15Monthly Usage Graph ' + PadLT(strComma(Days) + '|07 days, |15' + strComma(TotalCalls) + ' |07calls ', 63, ' ') + '|09' + #176 + ' |16'); + + GotoXY (6, 18); + + For Loop1 := 1 to 12 Do + Write ('|08' + #196 + #196 + #196 + ' '); + + GotoXY (6, 19); + Write ('|14Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'); + + GotoXY (2, 21); + Write ('|08|$D78' + #196); + + For Loop1 := 1 to 12 Do + For Loop2 := 15 DownTo 1 Do Begin + GotoXY (Loop1 * 6, 2 + Loop2); + Write (#250 + #250 + #250); + End; + + For Loop1 := 1 to 12 Do + DrawBar (6 * Loop1, Months[Loop1]); + + DisplayMonthly := True; +End; + +Begin + If Graphics = 0 Then Begin + WriteLn ('|CRSorry, usage graphs require ANSI graphics|CR|CR|PA'); + Exit; + End; + + If DisplayMonthly Then Begin + GotoXY (28, 22); + Write ('|07Press |08[|15ENTER|08] |07to continue|PN'); + End; +End