home *** CD-ROM | disk | FTP | other *** search
- 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.