[Back to MAIL SWAG index] [Back to Main SWAG index] [Original]
Program VERBOSITY_INDEX;
{
JUSTIN MARQUEZ
Reads a FidoNet *.MSG File areas and logs info about authorship and
"verbosity" found in the messages.
Requires Turbo Pascal 7.xx or Borland Pascal 7.xx (for the StringS Unit)
OutPut is redirectable. Can be quickly sorted With Dos's SORT.COM
Here is a batch File you may find useful:
rem YAK.BAT
verbose %1 > zap.txt
sort < zap.txt > yak.txt /+37 /R
del zap.txt
This Program is written by Justin Marquez, FidoNet 106/100
It is being donated to all as a PUBLIC DOMAIN Program, which may be
freely used, copied and modified as you please.
"if you improve on it, I'd like a copy of the modifications For my
own edification!"
}
Uses
Strings,
Dos;
Type
FidoMessageHeader = Record
FromUser : Array[0..35] of Char ;
ToUser : Array[0..35] of Char ;
Subject : Array[0..71] of Char ;
DateTime : Array[0..19] of Char ;
TimesRead : Word ;
DestNode : Word ;
OrigNode : Word ;
Cost : Word ;
OrigNet : Word ;
DestNet : Word ;
Filler : Array[0..7] of Byte ;
Replyto : Word ;
Attribute : Word ;
NextReply : Word ;
end;
Entry = Record
Author : String[36];
Count : Integer;
Bytes : LongInt;
end;
Var
MsgDir,
fn : String;
SR : SearchRec;
tmp : FidoMessageHeader;
Who_From : String[36];
n,
i : Integer;
HiNum : Integer;
rec : Array [1..512] of Entry;
TotBytes : LongInt;
Procedure GetMsgInfo (fname : String; Var Hdr : FidoMessageHeader);
Var
HFile : File of FidoMessageHeader;
MFile : Text;
begin
FillChar(Hdr, SizeOf(Hdr), #0); { clear it out initially }
{ get msg hdr only }
Assign(HFile,fname);
Reset(HFile);
Seek(HFile, 0);
Read(HFile, Hdr);
Close(HFile);
end;
Procedure Pad_Path(Var s : String);
begin
if s[length(s)] <> '\' then
s := s + '\';
end;
Procedure Process_Name;
Var
k : Integer;
Found : Boolean;
begin
Found := False;
if n > 0 then
For k := 1 to n do
if Who_From = rec[k].author then
begin
inc(rec[k].count);
rec[k].Bytes := rec[k].Bytes + SR.Size;
Found := True;
end
else
begin
rec[1].author := Who_From;
rec[1].count := 1;
rec[1].Bytes := rec[1].Bytes + SR.Size
end;
if not Found then
begin
inc(n);
Rec[n].Author := Who_From;
Rec[n].Count := 1;
rec[n].Bytes := rec[n].Bytes + SR.Size;
end;
end;
Procedure Intro_And_Init;
begin
FillChar(rec,SizeOf(rec),#0); { clear it out initially }
HiNum := 0;
TotBytes := 0;
n := 0;
if ParamCount > 0 then
MsgDir := ParamStr(1)
else
begin
WriteLn(' VERBOSE <path> >');
WriteLn('EXAMPLE:');
WriteLn;
WriteLn('VERBOSE C:\OPUS\HOUSYSOP\ ');
WriteLn(' reads all msg Files in the area and reports findings.');
WriteLn;
WriteLn(' Note: can be redirected to a File or device.');
WriteLn;
WriteLn('Public Domain from 106/100. Request as VERBOSE.ZIP.');
Halt(2);
end;
end;
Procedure Process_Files;
begin
Pad_Path(MsgDir);
fn := MsgDir + '*.MSG';
FindFirst(fn, AnyFile, SR);
While DosError = 0 do
begin
fn := MsgDir + SR.Name;
GetMsgInfo (fn, tmp);
Who_From := '';
Who_From := StrPas(StrUpper(tmp.FromUser));
Inc(HiNum);
TotBytes := TotBytes + SR.Size;
Process_Name;
FindNext(SR);
end;
end;
Procedure Report_Results;
begin
For i := 1 to n do
WriteLn(rec[i].Author : 36, Rec[i].Count : 4,
(100 * Rec[i].Count / HiNum) : 6 : 1, '% ',
Rec[i].Bytes : 6, ' Bytes or',
(100 * Rec[i].Bytes / TotBytes) : 5 : 1, '% by size' );
WriteLn(' Total messages found: ' : 36, HiNum : 4);
WriteLn(' Total Bytes found : ' : 36, TotBytes : 18);
WriteLn(n, ' different Writers found in ', MsgDir, '.');
end;
begin
Intro_And_Init;
Process_Files;
Report_Results;
end.
[Back to MAIL SWAG index] [Back to Main SWAG index] [Original]