home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
beehive
/
bbs
/
disp5.arc
/
DISPATCH.INC
< prev
Wrap
Text File
|
1990-09-20
|
6KB
|
269 lines
{----- DISPATCH.INC include file ------}
function open(fname: str14): boolean;
{ Open an existing text file. }
begin
assign(tfil, fname);
{$I-}
reset(tfil);
{$I+}
open:= IOresult = 0;
end; {open}
procedure opennew(fname: str14);
{ Create a new text file. }
begin
assign(tfil, fname);
{$I-}
rewrite(tfil);
{$I+}
end; {opennew}
function exists(name: str14): boolean;
{ If file (untyped) exists, close it. }
var
OK: boolean;
begin
assign(fil, name);
{$I-}
reset(fil);
OK:= (IOresult = 0);
if OK then
close(fil);
{$I+}
exists:= OK and (IOresult = 0);
end; {exists}
function exists1(name: str14): boolean;
{ If file (untyped) exists, leave open. }
begin
assign(fil, name);
{$I-}
reset(fil);
{$I+}
exists1:= (IOresult = 0);
end; {exists1}
function open_log: integer;
{ Open the Tabby MAIL.LOG file. }
var
OK: boolean;
int: integer;
begin
int:= 0;
OK:= exists1('MAIL.LOG');
if OK then
int:= 2
else begin
{$I-}
rewrite(fil);
{$I+}
OK:= (IOresult = 0);
if OK then int:= 1;
end;
open_log:= int;
end; {open_log}
function opensub: boolean;
{ Open $$$.SUB file. Clear it if file exists. }
var
OK: boolean;
begin
assign(sub, 'A:$$$.SUB');
{$I-}
rewrite(sub);
{$I+}
OK:= (IOresult = 0);
if OK then writeln('Submit file is open.')
else
writeln('++ Cannot open Submit, process aborted ++');
opensub:= OK;
end; {opensub}
procedure submit(st: str60);
{ Save st to submit file record. }
{ Ignore null and commented lines. }
var
len, I: byte;
buffer: array[1..128] of byte;
begin
if (length(st) = 0) or (st[1] = ';')
or (st[1] = ' ') then exit;
len:= length(st);
buffer[1]:= len;
for I:= 1 to len do
buffer[I + 1]:= ord(st[I]);
buffer[len + 2]:= 0;
buffer[len + 3]:= ord('$');
for I:= len + 4 to 128 do
buffer[I]:= 0;
blockWrite(sub, buffer, 1);
end; {submit}
procedure kill(name: str14);
{ Kill a file if it exists. }
begin
if not exists(name) then exit;
assign(fil, name);
{$I-}
erase(fil);
{$I+}
end; {kill}
procedure do_rename(name, name1: str14);
{ Rename a file. }
begin
kill(name);
assign(tfil, name1);
{$I-}
rename(tfil, name);
{$I+}
end; {do_rename}
procedure update_log(OK: boolean);
{ Updates Tabby MAIL.LOG file. }
{ If OK is false, an error is logged. }
{ Other information passed in from globals. }
var
blank_string, log_line: str64;
st: string[40];
st1: string[7];
numb: string[5];
stime: string[14];
i, int, code: integer;
buffer: array[1..128] of byte;
begin
{st:= 'Revent 01/31/89 01:00 Beginning event Z'
st:= 'Dispatch 01/31/89 01:00 Forcing event '
st:= 'Dispatch 01/31/89 01:00 Running event '
st:= 'Dispatch 01/31/89 01:00 Error - event '}
blank_string:= '';
for i:= 1 to 62 do
blank_string:= blank_string + ' ';
blank_string:= blank_string + CR + LF;
if OK then
begin
if force_event then st1:= 'Forcing' else st1:= 'Running';
end
else st1:= 'Error -'; {not OK}
stime:= gsysdate + ' ' + gsystime;
st:= 'Dispatch ' + stime + ' ' + st1 + ' ' + tag;
log_line:= blank_string;
for i:= 1 to length(st) do
log_line[i]:= st[i];
int:= open_log;
case int of
0: {bad file}
writeln('++ Error reading MAIL.LOG ++');
1: {new file}
begin
for i:= 1 to 64 do
buffer[i]:= ord(blank_string[i]);
for i:= 1 to 64 do
buffer[i + 64]:= ord(log_line[i]);
end;
2: {old file}
begin
blockread(fil, buffer, 1);
seek(fil, 0);
numb:= '';
for i:= 1 to 5 do
numb:= numb + chr(buffer[i + 1]);
numb:= copy(numb, 1, pos(chr(0), numb) - 2);
val(numb, int, code);
if code > 0 then int:= 0;
end;
end; {case}
if (int > 0) then {update pointer}
begin
int:= int + 1;
str(int, numb);
numb:= numb + ' ' + chr(0);
for i:= 1 to length(numb) do
buffer[i + 1]:= ord(numb[i]);
blockwrite(fil, buffer, 1);
end;
if (int > 1) then {add to old file}
begin
if odd(int) then
begin
seek(fil, filesize(fil));
for i:= 1 to 64 do
buffer[i]:= ord(log_line[i]);
for i:= 1 to 64 do
buffer[i + 64]:= ord(blank_string[i]);
end
else begin {even}
seek(fil, filesize(fil) - 1);
blockread(fil, buffer, 1);
seek(fil, filesize(fil) - 1);
for i:= 1 to 64 do
buffer[i + 64]:= ord(log_line[i]);
end;
blockwrite(fil, buffer, 1);
end;
if (int > 0) then close(fil);
end; {update_log}
procedure set_default_drive;
{ Sets drive/user to value of default_drive constant. }
var
ch: string[1];
d, u: byte;
int, code: integer;
begin
if (length(default_drive) = 0) then exit;
ch:= upCase(default_drive[1]);
d:= ord(ch) - $41;
val(copy(default_drive, 2, 2), int, code);
if (code > 0) then exit;
if (d < 0) or (d > 15) then exit;
u:= lo(int);
if (u < 0) or (u > 15) then exit;
bdos(14, d);
bdos(32, u);
end; {set_default_drive}
function bt2st(bt: byte): str2;
{ Convert byte to 2 character string. }
{ Add leading zero if needed. }
var
st: str2;
i: integer;
begin
str(bt, st);
if (length(st) = 1) then
st:= '0' + st;
bt2st:= st;
end; {bt2st}
procedure go_to_program(st: str60);
{ Execute a program via the MCLB. }
{ Based on PutOnCommandLine by Cyrus Patel (LUP.PAS). }
var
I: integer;
addr: integer;
begin
addr:= MCLB + 4; {allow page boundaries}
mem[MCLB] := lo(addr);
mem[MCLB + 1] := hi(addr);
mem[MCLB + 2] := 80;
mem[MCLB + 3] := length(st);
for I := 1 to length(st) do
mem[MCLB + I + 3] := ord(st[I]);
mem[MCLB + length(st) + 4] := $00;
mem[MCLB + length(st) + 5] := $00;
mem[$5D]:= $20; { Clear possible garbage from command line. }
halt;
end; {go_to_program}
{ ------------ end of include file -----------}