home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
TURBOPAS
/
TBBS22.LBR
/
TUTL.PQS
/
TUTL.PAS
Wrap
Pascal/Delphi Source File
|
2000-06-30
|
13KB
|
504 lines
{ TUTL.PAS - Turbo Bulletin Board System utility program }
program tutl;
{$C-}
{$I TBBSHDR.INC}
{$I ACCESS.BOX}
{$I GETKEY.BOX}
{$I ADDKEY.BOX}
{$I DELKEY.BOX}
{$I TBBSCOM.INC}
var
prt: boolean;
procedure print(line: StdStr);
{ Print line on screen or printer }
begin
if prt
then writeln(LST, line)
else writeln(line)
end;
procedure print_user;
{ Print the "user" file }
var
i: integer;
t: tad_array;
st: StdStr;
begin
if prt
then
begin
GetTAD(t);
st := systad(t);
print(^L + 'User file as of: ' + st);
print('')
end
else ClrScr;
ClearKey(IdxF);
repeat
NextKey(IdxF, i, st);
if OK
then
begin
GetRec(DatF, i, user_rec);
print(user_rec.user_firstname + ' ' + user_rec.user_lastname +
' from ' + user_rec.user_address + ' last on ' +
systad(user_rec.user_laston))
end
until (not OK) or brk;
if not prt
then pause
end;
procedure print_unvalidated;
{ Print the unvalidated users }
var
i: integer;
t: tad_array;
st: StdStr;
begin
if prt
then
begin
GetTAD(t);
st := systad(t);
print(^L + 'Unvalidated users as of: ' + st);
print('')
end
else ClrScr;
ClearKey(IdxF);
repeat
NextKey(IdxF, i, st);
if OK
then
begin
GetRec(DatF, i, user_rec);
if user_rec.user_bbs_stat = 0
then print(user_rec.user_firstname + ' ' + user_rec.user_lastname +
' from ' + user_rec.user_address + ' last on ' +
systad(user_rec.user_laston))
end
until (not OK) or brk;
if not prt
then pause
end;
procedure print_caller;
{ Print the "caller" file }
var
t: tad_array;
st: StdStr;
nclr_file: file of calr_list;
begin
if prt
then
begin
GetTAD(t);
st := systad(t);
print(^L + 'Caller file as of: ' + st);
print('')
end
else ClrScr;
seek(calr_file, 1);
while (not EOF(calr_file)) and (not brk) do
begin
read(calr_file, calr_rec);
GetRec(DatF, calr_rec.calr_num, user_rec);
print(systad(calr_rec.calr_tad) + ' ' +
user_rec.user_firstname + ' ' + user_rec.user_lastname);
end;
if ask('Do you want to reset the caller file')
then
begin
writeln('Resetting ', calr_name, ext);
assign(nclr_file, calr_name + '$$$');
rewrite(nclr_file);
seek(calr_file, 0);
read(calr_file, calr_rec);
write(nclr_file, calr_rec);
close(calr_file);
close(nclr_file);
erase(calr_file);
rename(nclr_file, calr_name + ext);
reset(calr_file)
end
end;
procedure print_messages;
{ Print the "message" file }
var
i: integer;
t: tad_array;
st: StdStr;
to_fn, fr_fn: firstname;
to_ln, fr_ln: lastname;
begin
if prt
then
begin
GetTAD(t);
st := systad(t);
print(^L + 'Message file as of: ' + st);
print('')
end
else ClrScr;
seek(summ_file, 1);
while (not EOF(summ_file)) and (not brk) do
begin
read(summ_file, summ_rec);
with summ_rec do
begin
if summ_to_num = mesg_pub
then
begin
to_fn := 'ALL';
to_ln := ''
end
else if summ_to_num = mesg_era
then
begin
to_fn := 'MESSAGE';
to_ln := 'ERASED'
end
else
begin
GetRec(DatF, summ_to_num, user_rec);
to_fn := user_rec.user_firstname;
to_ln := user_rec.user_lastname
end;
GetRec(DatF, summ_from_num, user_rec);
fr_fn := user_rec.user_firstname;
fr_ln := user_rec.user_lastname;
st := systad(summ_date);
print('Message number ' + intstr(summ_num) + ' entered ' + st + '.');
print('From: ' + fr_fn + ' ' + fr_ln);
print(' To: ' + to_fn + ' ' + to_ln);
print(' Re: ' + summ_subject);
seek(mesg_file, summ_st_rec);
for i := 1 to summ_size do
begin
read(mesg_file, mesg_rec);
print(mesg_rec.mesg_text)
end;
if prt
then print('')
else
begin
pause;
ClrScr
end
end
end
end;
procedure pack_messages;
{ Pack the message files }
var
i: integer;
nsum_rec : summ_list;
nsum_file : file of summ_list;
nmsg_rec : mesg_list;
nmsg_file : file of mesg_list;
begin
write('Packing');
assign(nsum_file, summ_name + '$$$');
assign(nmsg_file, mesg_name + '$$$');
rewrite(nsum_file);
rewrite(nmsg_file);
seek(summ_file, 0);
read(summ_file, summ_rec); { copy message counter to new file }
write(nsum_file, summ_rec);
while not EOF(summ_file) do
begin
read(summ_file, summ_rec);
if summ_rec.summ_to_num <> mesg_era
then
begin
seek(mesg_file, summ_rec.summ_st_rec);
summ_rec.summ_st_rec := filesize(nmsg_file);
write(nsum_file, summ_rec);
for i := 1 to summ_rec.summ_size do
begin
read(mesg_file, mesg_rec);
write(nmsg_file, mesg_rec)
end
end
end;
close(summ_file);
close(mesg_file);
close(nsum_file);
close(nmsg_file);
erase(summ_file);
erase(mesg_file);
rename(nsum_file, summ_name + ext);
rename(nmsg_file, mesg_name + ext);
reset(summ_file);
reset(mesg_file)
end;
procedure display_user;
var
st: StdStr;
begin
ClrScr;
with user_rec do
begin
writeln('Name : ', user_firstname, ' ', user_lastname);
writeln('Address : ', user_address);
writeln('Password : ', user_pw);
writeln('Max drive: ', user_maxdrv);
writeln('Max user : ', user_maxusr);
writeln('Sys Stat : ', user_sys_stat);
writeln('BBS Stat : ', user_bbs_stat);
writeln('Nulls : ', user_nulls);
writeln('U/L case : ', user_case_sw);
st := systad(user_laston);
writeln('Last on : ', st);
writeln('On today : ', user_time_today);
writeln('On total : ', user_time_total);
writeln('Last hi : ', user_lasthi);
writeln('Uploads : ', user_up);
writeln('Downloads: ', user_down)
end;
gotoxy(1, 22)
end;
procedure change_user;
procedure accept(x, y: integer; var st: StdStr; len: integer; mode: StdStr);
begin
GotoXY(x, y);
getstring(st, len, 'E' + mode)
end;
begin { change_user }
with user_rec do
begin
accept(12, 2, st, len_ad, '');
if st <> ''
then user_address := st;
accept(12, 3, st, len_pw, 'S');
if st <> ''
then user_pw := st;
accept(12, 4, st, 1, '');
if st <> ''
then user_maxdrv := strint(st);
accept(12, 5, st, 1, '');
if st <> ''
then user_maxusr := strint(st);
accept(12, 6, st, 1, '');
if st <> ''
then user_sys_stat := strint(st);
accept(12, 7, st, 1, '');
if st <> ''
then user_bbs_stat := strint(st);
accept(12, 8, st, 1, '');
if st <> ''
then user_nulls := strint(st);
accept(12, 9, st, 2, '');
if st <> ''
then user_case_sw := strint(st);
accept(12, 11, st, 2, '');
if st <> ''
then user_time_today := strint(st);
accept(12, 12, st, 7, '');
if st <> ''
then user_time_total := strint(st);
accept(12, 13, st, 7, '');
if st <> ''
then user_lasthi := strint(st);
accept(12, 14, st, 3, '');
if st <> ''
then user_up := strint(st);
accept(12, 15, st, 3, '');
if st <> ''
then user_down := strint(st)
end
end;
procedure edit_user;
var
st, key: StdStr;
begin
writeln;
fn := prompt('First name: ', len_fn, 'ES');
ln := prompt(' Last name: ', len_ln, 'ES');
key := pad(ln, len_ln) + pad(fn, len_fn);
FindKey(IdxF, user_loc, key);
if OK
then
begin
GetRec(DatF, user_loc, user_rec);
display_user;
while ask('Edit this user') do
begin
change_user;
display_user
end;
PutRec(DatF, user_loc, user_rec)
end
else
begin
writeln('User not found');
delay(2000)
end
end;
procedure delete_user;
var
key: StdStr;
begin
writeln;
fn := prompt('First name: ', len_fn, 'ES');
ln := prompt(' Last name: ', len_ln, 'ES');
if ask('Delete')
then
begin
key := pad(ln, len_ln) + pad(fn, len_fn);
DeleteKey(IdxF, user_loc, key);
if OK
then DeleteRec(DatF, user_loc)
else
begin
writeln('User not found');
delay(2000)
end
end
end;
procedure purge_user;
var
age, mon: integer;
t: tad_array;
st: StdStr;
begin
writeln;
GetTAD(t);
age := strint(prompt('Allowable age [months]: ', 10, 'E'));
user_loc := 1;
while user_loc < FileLen(DatF) do
begin
GetRec(DatF, user_loc, user_rec);
mon := t[4] - user_rec.user_laston[4];
if t[5] > user_rec.user_laston[5]
then mon := mon + 12;
if (user_rec.user_used = 0) and ((mon > age) or ((mon = age)
and (t[3] > user_rec.user_laston[3])))
then
begin
writeln('Deleting ', user_rec.user_firstname, ' ',
user_rec.user_lastname);
st := pad(user_rec.user_lastname, len_ln) +
pad(user_rec.user_firstname, len_fn);
DeleteKey(IdxF, user_loc, st);
DeleteRec(DatF, user_loc)
end;
user_loc := user_loc + 1
end;
pause
end;
begin { main }
writeln(version);
bel := FALSE;
prt := FALSE;
fini := FALSE;
InitIndex;
OpenFile(DatF, user_data + ext, SizeOf(user_rec));
if OK
then OpenIndex(IdxF, user_indx + ext, len_ln + len_fn, 0);
if not OK
then
begin
write(^G, 'User files missing. Creating ', user_data, ext);
MakeFile(DatF, user_data + ext, SizeOf(user_rec));
writeln(', ', user_indx, ext);
MakeIndex(IdxF, user_indx + ext, len_ln + len_fn, 0)
end;
assign(calr_file, calr_name + ext);
{$I-} reset(calr_file) {$I+};
OK := (IOresult = 0);
if not OK
then
begin
writeln(^G, 'Caller file missing. Creating ', calr_name, ext);
rewrite(calr_file);
calr_rec.calr_num := 0;
write(calr_file, calr_rec)
end;
assign(summ_file, summ_name + ext);
assign(mesg_file, mesg_name + ext);
{$I-} reset(summ_file) {$I+};
OK := (IOresult = 0);
if OK
then
begin
{$I-} reset(mesg_file) {$I+};
OK := (IOresult = 0)
end;
if not OK
then
begin
write(^G, 'Message files missing. Creating ', summ_name, ext);
rewrite(summ_file);
summ_rec.summ_num := 0;
write(summ_file, summ_rec);
writeln(', ', mesg_name, ext);
rewrite(mesg_file)
end;
repeat
ClrScr;
writeln('Turbo Bulletin Board System Utilities');
writeln;
write (' P: Printer (o');
if prt
then writeln('n)')
else writeln('ff)');
writeln;
writeln(' U: User list');
writeln(' N: uNvalidated user list');
writeln(' C: Caller list');
writeln(' M: Message list');
writeln;
writeln(' E: Edit user');
writeln(' D: Delete user');
writeln(' G: Purge users');
writeln;
writeln(' R: Repack messages');
writeln;
writeln(' Q: Quit');
writeln;
writeln(FileLen(DatF), ' records, ', UsedRecs(DatF), ' users in file.');
writeln;
st := prompt('Function: ', 1, 'AES');
case st[1] of
'P': prt := not prt;
'U': print_user;
'N': print_unvalidated;
'C': print_caller;
'M': print_messages;
'E': edit_user;
'D': delete_user;
'G': purge_user;
'R': pack_messages;
'Q': fini := TRUE;
else
end
until fini;
CloseFile(DatF);
CloseIndex(IdxF);
close(summ_file);
close(mesg_file);
close(calr_file)
end.