198 lines
5.9 KiB
ObjectPascal
Executable File
198 lines
5.9 KiB
ObjectPascal
Executable File
program Marsmail;
|
|
uses dos;
|
|
|
|
var mailfile, numfile, outfile: text;
|
|
number, miline, moline, sl, slc: string; {mail-in, mail-out}
|
|
UserId,UserLn: string; {mail dir on netware}
|
|
nfile, odir, mfile: string; {numberfile, output dir, mailfile}
|
|
numbint: longint;
|
|
o, code, mi, i,j: integer; {mailindex}
|
|
prevline, shortline,v : boolean; {v=verbose}
|
|
|
|
|
|
Function FileExists(FileName: String): Boolean;
|
|
{ Boolean function that returns True if the file exists;otherwise,
|
|
it returns False. Closes the file if it exists. }
|
|
var
|
|
F: text;
|
|
begin
|
|
{$I-}
|
|
Assign(F, FileName);
|
|
FileMode := 0; { Set file access to read only }
|
|
Reset(F);
|
|
Close(F);
|
|
{$I+}
|
|
FileExists := (IOResult = 0) and (FileName <> '');
|
|
end; { FileExists }
|
|
|
|
Function ReadLine(var ReadFile: Text): String;
|
|
var
|
|
C: Char;
|
|
S: String;
|
|
O: boolean;
|
|
Begin
|
|
O:=False;
|
|
S:='';
|
|
If Not EOF(ReadFile) Then Repeat
|
|
{$I-}
|
|
Read(readfile,c);
|
|
{$I+}
|
|
If EOF(ReadFile) Or (Ioresult <> 0) Or (C = #10) then
|
|
O:=True
|
|
Else
|
|
S:=S+C;
|
|
Until O;
|
|
ReadLine:=S;
|
|
End;
|
|
|
|
Begin
|
|
v:=false;
|
|
UserId:=GetEnv('ID');
|
|
UserLn:=GetEnv('LN');
|
|
nfile:='F:\mail\'+UserId+'\numfile';
|
|
mfile:='F:\unixmail\'+UserLn;
|
|
odir:='F:\mail\'+UserId;
|
|
for i:=1 to paramcount do
|
|
begin
|
|
sl:=paramstr(i);
|
|
for j:=1 to length(sl) do sl[j]:=upcase(sl[j]);
|
|
if (pos('/N=',sl)=1) then nfile:=copy(sl,3,length(sl)-3);
|
|
if (pos('/O=',sl)=1) then odir:=copy(sl,3,length(sl)-3);
|
|
if (pos('/M=',sl)=1) then mfile:=copy(sl,3,length(sl)-3);
|
|
if (pos('/V',sl)=1) then v:=true;
|
|
if (pos('/?',sl)=1) or (pos('/H',sl)=1) or (pos('/HELP',sl)=1) then
|
|
begin
|
|
Writeln('Copyright 1996/9 Dud software');
|
|
Writeln(' Modifications by EL GUIDO');
|
|
Writeln;
|
|
Writeln('Purpose: Creates *.cnm files from a unix mail file for Pegasus');
|
|
Writeln('Usage: marsmail.exe [/n=x:\numb\file] [/m=y:\mail\file]');
|
|
Writeln(' [/o=z:\base\out\dir] [/v] [/?|h|help]');
|
|
Writeln('Where:');
|
|
Writeln(' /n = numberfile, /m=singlemailfile, /o=outputbasedir');
|
|
Writeln(' /v = verbose messaging mode, /?|/h|/help = this help screen');
|
|
writeln('And: numberfile contains a single 8 digit number e.g. 00000019');
|
|
writeln(' singlemailfile is the unix /var/spool/mail/userfile unix2dos');
|
|
writeln(' converted. outdir is the dir where *.cnm files should be created');
|
|
writeln(' without the trailing \');
|
|
writeln;
|
|
writeln;
|
|
writeln;
|
|
halt(2);
|
|
end;
|
|
end;
|
|
|
|
{ Open the numfile to read in a number }
|
|
|
|
if v then writeln('Opening Number file...');
|
|
if FileExists(nfile) then
|
|
Begin
|
|
{$I-}
|
|
assign (numfile,nfile);
|
|
reset(numfile);
|
|
if doserror >0 then begin writeln('Error reading '+nfile); halt(1); end;
|
|
{$I+}
|
|
if v then writeln('Reading number file...');
|
|
readln(numfile,number);
|
|
close(numfile);
|
|
end
|
|
else
|
|
Begin
|
|
assign (numfile,nfile);
|
|
{$I-}
|
|
Rewrite(numfile);
|
|
{$I+}
|
|
if doserror >0 then begin writeln('Error rewriting '+nfile); halt(1); end;
|
|
number:='00000000';
|
|
if v then writeln('Creating a new number file');
|
|
writeln(numfile,number);
|
|
Close(numfile);
|
|
end;
|
|
val(number,numbint,code);
|
|
numbint:=numbint+1;
|
|
str(numbint:8,number);
|
|
if v then writeln('Converting spaces to zeroes');
|
|
for i:=1 to length(number) do if number[i]=' ' then number[i]:='0';
|
|
|
|
|
|
{ Open the converted mailfile and start reading it }
|
|
slc:='|/-\|/-\';
|
|
sl:='|';
|
|
o:=2;
|
|
assign(mailfile,mfile);
|
|
assign(outfile,odir+'\'+number+'.cnm');
|
|
{$I-}
|
|
if v then writeln('Opening mailfile for reading...');
|
|
reset(mailfile);
|
|
{$I+}
|
|
if doserror >0 then begin writeln('Error opening '+mfile); halt(1); end;
|
|
if eof(mailfile) then
|
|
begin
|
|
close(mailfile);
|
|
halt(3);
|
|
end;
|
|
{$I-}
|
|
if v then writeln('Opening '+odir+'\'+number+'.cnm file for writing....');
|
|
rewrite(outfile);
|
|
{$I+}
|
|
if doserror >0 then begin writeln('Error rewriting '+odir+'\'+number+'.cnm'); halt(1); end;
|
|
mi:=0;
|
|
shortline:=false;
|
|
writeln('Creating mail messages from UnixMail file to Pegasus mail messages.');
|
|
write('Working \');
|
|
if v then write(' Line:');
|
|
|
|
while not eof(mailfile) do
|
|
begin
|
|
{readln(mailfile,miline); this was the problem, the next is the solution}
|
|
miline:=readline(mailfile);
|
|
if v then write(mi,':');
|
|
prevline:=shortline;
|
|
shortline:=false;
|
|
|
|
if (length(miline)<2) then
|
|
begin
|
|
shortline:=true;
|
|
end;
|
|
mi:=mi+1;
|
|
if ( (not v) and ((mi mod 10)=0)) then
|
|
begin
|
|
write(char(8)+sl);
|
|
sl:=slc[o];
|
|
o:=o+1;
|
|
if o=9 then o:=1;
|
|
end;
|
|
if (mi>5) and (prevline=true) then begin
|
|
if (((pos('Received:',miline)=1)
|
|
or (pos('Return-Path:', miline)=1)
|
|
or (pos('From ',miline)=1)
|
|
or (pos('From:',miline)=1))
|
|
and (prevline=true)) then
|
|
begin {to flush file and start a new one}
|
|
close(outfile);
|
|
numbint:=numbint+1;
|
|
str(numbint:8,number);
|
|
for i:=1 to length(number) do if number[i]=' ' then number[i]:='0';
|
|
assign(outfile,odir+'\'+number+'.cnm');
|
|
rewrite(outfile);
|
|
if v then writeln;
|
|
if v then writeln('Finished with message no ',numbint-1,'...');
|
|
mi:=0;
|
|
end;
|
|
end;
|
|
writeln(outfile,miline);
|
|
end;
|
|
if v then writeln;
|
|
if v then writeln('Closing output files');
|
|
close(outfile);
|
|
if v then writeln('Closing mail file');
|
|
close(mailfile);
|
|
assign (numfile,nfile);
|
|
if v then writeln('Updating number file');
|
|
rewrite (numfile);
|
|
writeln(numfile,number);
|
|
close(numfile);
|
|
writeln(' ');
|
|
if v then writeln('Program finished.');
|
|
end. {of program}
|