home *** CD-ROM | disk | FTP | other *** search
- { MARK LEWIS }
-
- Uses
- Dos;
-
- Type
- ti = Record
- Var1 : Word;
- Var2 : Word;
- end;
-
- MsgInfo = Record
- From_Name : Array[1..36] of Char;
- To_Name : Array[1..36] of Char;
- Subject : Array[1..72] of Char;
- DateTime : Array[1..20] of Char;
- timesread : Word;
- destnode : Word;
- orignode : Word;
- cost : Word;
- orignet : Word;
- destnet : Word;
- field1 : ti; { these two have at least two seperate }
- field2 : ti; { Uses. time sent/rcvd or zone/point info }
- replyto : Word;
- attribute : Word;
- nextmsg : Word;
- end;
-
- {
- ahhh... what the heck... the following will read the MSG header and display
- it... i'll leave the processing of the messagebody as an exercise For the
- reader(s)... it's a lot of fun... make sure you get/have the FTSC documents
- handy... there is one that talks about hints to follow when processing messages
- (in .PKT's and in .MSG's) like filtering out all CR's, LF's and softcarriage
- returns -=B-)
- }
-
- Var
- MInfo : MsgInfo;
- MSGName : PathStr;
- MSGFile : File;
- i : Byte;
- t1,t2 : datetime;
- notdate : Boolean;
- numread : Word;
-
- {-------------------------------------------------------------------------}
- begin { Main Body }
- assign(output, '');
- reWrite(output);
- Filemode := 64;
- MSGName := ParamStr(1); { Get message Filename from command line }
- if (MSGName = '') Then
- begin
- WriteLn('Name of *.MSG must be specified on command line.');
- Halt;
- end;
- FillChar(Minfo,SizeOf(Minfo),#0);
- Assign(MSGFile,MSGName);
- {$I-} Reset(MSGFile,1); {$I+}
- if IOResult <> 0 Then
- begin
- Writeln('Unable to open the *.MSG!');
- halt;
- end;
- { Read in header... }
- BlockRead(MSGFile,Minfo,SizeOf(Minfo),NumRead);
- { decode time/date fields For FrontDoor/OPUS }
- { i think this is a UNIX time/date format but not sure }
- t1.min := (minfo.field1.Var2 and $07e0) shr 5;
- t1.hour := (minfo.field1.Var2 and 63488) shr 11;
- t1.sec := 0;
- t1.year := 1980 + (minfo.field1.Var1 and $fe00) shr 9;
- t1.month := (minfo.field1.Var1 and $01e0) shr 5;
- t1.day := (minfo.field1.Var1 and $001f);
- t2.min := (minfo.field2.Var2 and $07e0) shr 5;
- t2.hour := (minfo.field2.Var2 and 63488) shr 11;
- t2.sec := 0;
- t2.year := 1980 + (minfo.field2.Var1 and $fe00) shr 9;
- t2.month := (minfo.field2.Var1 and $01e0) shr 5;
- t2.day := (minfo.field2.Var1 and $001f);
- if (t1.year < 1990) and (t2.year < 1990) then
- notdate := True
- else
- notdate := False;
- { if the years are over three years ago, then we are probably }
- { processing a message that is using these fields For their }
- { other documented use. }
- Write('From: ');
- For i := 1 to 36 do
- Write(minfo.from_name[i]);
- Writeln;
- Write('To : ');
- For i := 1 to 36 do
- Write(minfo.to_name[i]);
- Writeln;
- Write('Subj: ');
- For i := 1 to 72 do
- Write(minfo.subject[i]);
- Writeln;
- Write('Date: ');
- For i := 1 to 20 do
- Write(minfo.datetime[i]);
- Writeln;
- Writeln('timesread : ',minfo.timesread);
- Writeln(' destnode : ',minfo.destnode );
- Writeln(' orignode : ',minfo.orignode );
- Writeln(' cost : ',minfo.cost );
- Writeln(' orignet : ',minfo.orignet );
- Writeln(' destnet : ',minfo.destnet );
- if notdate then
- begin
- Writeln(' destzone : ',minfo.field1.Var1);
- Writeln(' origzone : ',minfo.field1.Var2);
- Writeln('destpoint : ',minfo.field2.Var1);
- Writeln('origpoint : ',minfo.field2.Var2);
- end
- else
- begin
- Writeln(' time1 : ',t1.month,'/',t1.day,'/',t1.year,' ',
- t1.hour,':',t1.min,':',t1.sec);
- Writeln(' time2 : ',t2.month,'/',t2.day,'/',t2.year,' ',
- t2.hour,':',t2.min,':',t2.sec);
- end;
- Writeln(' replyto : ',minfo.replyto );
- Writeln('attribute : ',minfo.attribute);
- Writeln(' nextmsg : ',minfo.nextmsg );
- Close(MSGFile);
- end.
-