home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Jason Aller Floppy Collection
/
270.img
/
FORUM25C.ZIP
/
BSPONSR.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-02-06
|
13KB
|
511 lines
{=============================================================================}
Procedure boardsponsor;
Procedure getbgen (txt:mstr; VAR q);
VAR s:lstr absolute q;
begin
writeln (^B'Current ',txt,': ',s);
buflen:=30;
writestr ('Enter new '+txt+':');
if length(input)>0 then s:=input
end;
Procedure getbint (txt:mstr; VAR i:integer);
VAR a:anystr;
begin
a:=strr(i);
getbgen (txt,a);
i:=valu(a);
writecurboard
end;
Procedure getbstr (txt:mstr; VAR q);
begin
getbgen (txt,q);
writecurboard
end;
Procedure setacc (ac:accesstype; un:integer);
VAR u:userrec;
begin
seek (ufile,un);
read (ufile,u);
setuseraccflag (u,curboardnum,ac);
seek (ufile,un);
write (ufile,u)
end;
Function queryacc (un:integer):accesstype;
VAR u:userrec;
begin
seek (ufile,un);
read (ufile,u);
queryacc:=getuseraccflag (u,curboardnum)
end;
Procedure setnameaccess;
VAR un,n:integer;
ac:accesstype;
q,unm:mstr;
begin
writestr (^M'Change access for user:');
un:=lookupuser(input);
if un=0 then begin
writeln ('No such user!');
exit
end;
unm:=input;
ac:=queryacc(un);
writeln (^B^M'Current access: ',accessstr[ac]);
getacflag (ac,q);
if ac=invalid then exit;
if un=unum then writeurec;
setacc (ac,un);
if un=unum then readurec;
case ac of
letin:n:=1;
keepout:n:=2;
bylevel:n:=3
end;
writelog (5,n,unm)
end;
Procedure setallaccess;
VAR cnt:integer;
ac:accesstype;
q:mstr;
begin
writehdr ('Set Everyone''s Access');
getacflag (ac,q);
if ac=invalid then exit;
writeurec;
setallflags (curboardnum,ac);
readurec;
writeln ('Done.');
writelog (5,4,accessstr[ac])
end;
Procedure listaccess;
Procedure listacc (all:boolean);
VAR cnt:integer;
a:accesstype;
u:userrec;
Procedure writeuser;
begin
if all
then
begin
tab (u.handle,30);
if a=bylevel
then writeln ('Level='+strr(u.level))
else writeln ('Let in')
end
else writeln (u.handle)
end;
begin
seek (ufile,1);
for cnt:=1 to numusers do begin
read (ufile,u);
a:=getuseraccflag (u,curboardnum);
case a of
letin:writeuser;
bylevel:if all and (u.level>=curboard.level) then writeuser
end;
if break then exit
end
end;
begin
writestr (
'List A)ll users who have access, or only those with S)pecial access? *');
if length(input)=0 then exit;
case upcase(input[1]) of
'A':listacc (true);
'S':listacc (false)
end
end;
Procedure getblevel;
VAR Post:bulrec;
begin
getbint ('level',curboard.level);
writelog (5,12,strr(curboard.level))
end;
Procedure getautodel;
VAR Post:bulrec;
begin
with curboard do begin
getbint ('auto-delete',autodel);
if autodel<10
then
begin
writeln (^B'HEY! It can''t be less than ten!');
autodel:=numbuls+1;
if autodel<10 then autodel:=10;
writeln (^B'Setting autodelete to ',autodel);
writecurboard
end
else
if autodel<=numbuls
then
begin
writeln (^B'Deleting bulletins...');
while autodel<=numbuls do delbul (2,true)
end
end;
writelog (5,11,strr(curboard.autodel))
end;
Procedure getfiletitle;
VAR fn:integer;
f:filerec;
begin
fn:=getfilenumber ('change the title of');
if fn<>0 then begin
seekffile (fn);
read (ffile,f); che;
writeln (^B'Old description: ',f.descrip);
writestr ('New description [or CR]:');
if length(input)>0 then begin
f.descrip:=input;
seekffile (fn);
write (ffile,f);
writelog (5,9,f.descrip)
end
end
end;
Procedure movefile;
VAR f:filerec;
tcb:boardrec;
tcbn,dbn,fn:integer;
tcbname:sstr;
begin
writehdr ('File Move');
fn:=getfilenumber ('move');
if fn=0 then exit;
seekffile (fn);
read (ffile,f);
writestr ('Move "'+f.descrip+'" to which board? *');
if length(input)=0 then exit;
tcb:=curboard;
tcbn:=curboardnum;
tcbname:=curboardname;
dbn:=searchboard(input);
if dbn=-1 then begin
writeln ('No such board!');
exit
end;
writeln ('Moving...');
delfile (fn);
close (bfile);
close (ffile);
seek (bdfile,dbn);
read (bdfile,curboard);
curboardnum:=dbn;
curboardname:=curboard.shortname;
openbfile;
addfile (f);
close (bfile);
close (ffile);
curboard:=tcb;
curboardname:=tcbname;
curboardnum:=tcbn;
openbfile;
writelog (5,6,f.descrip);
writeln (^B'Done!')
end;
Procedure movebulletin;
VAR Post:bulrec;
tcb:boardrec;
tcbn,dbn,bnum:integer;
tcbname,dbname:sstr;
begin
writehdr ('Bulletin Move');
getbnum ('move');
if not checkcurbul then exit;
bnum:=Cur_bul;
seekbfile (bnum);
read (bfile,Post);
writestr ('Move "'+Post.title+'" posted by '+Post.leftby+
' to which board? *');
if length(input)=0 then exit;
tcbname:=curboardname;
dbname:=input;
dbn:=searchboard(dbname);
if dbn=-1 then begin
writeln ('No such board!');
exit
end;
writeln ('Moving...');
delbul (bnum,false);
close (bfile);
close (ffile);
curboardname:=dbname;
openbfile;
addbul (Post);
close (bfile);
close (ffile);
curboardname:=tcbname;
openbfile;
writelog (5,13,Post.title);
writeln (^B'Done!')
end;
Procedure wipeoutfile;
VAR un,fn:integer;
f:filerec;
q:file;
n:mstr;
u:userrec;
begin
writehdr ('File Wipe-out');
fn:=getfilenumber ('wipe out');
if fn=0 then exit;
seekffile (fn);
read (ffile,f);
writestr ('Wipe out: "'+f.descrip+'" ? *');
if not yes then exit;
writestr ('Erase disk file '+f.fname+'? *');
if yes then begin
assign (q,f.fname);
erase (q);
un:=ioresult
end;
delfile (fn);
writelog (5,7,f.descrip);
n:=f.sentby;
un:=lookupuser(n);
if un<>0
then
begin
seek (ufile,un);
read (ufile,u);
u.nup:=u.nup-1;
writeln (n,' now has ',u.nup,' uploads.');
seek (ufile,un);
write (ufile,u)
end
end;
Procedure setsponsor;
VAR un:integer;
Post:bulrec;
begin
writestr ('New sponsor:');
if length(input)=0 then exit;
un:=lookupuser (input);
if un=0
then writeln ('No such user.')
else
begin
curboard.sponsor:=input;
writelog (5,8,input);
writecurboard
end
end;
Procedure renameboard;
VAR sn:sstr;
nfp,nbf,nff:lstr;
qf:file;
d:integer;
begin
getbstr ('board name',curboard.boardname);
sn:=curboard.shortname;
getbgen ('access name/number',sn);
writelog (5,5,curboard.boardname+' ['+sn+']');
if match(sn,curboard.shortname) then exit;
if not validbname(sn) then begin
writeln ('Invalid board name!');
exit
end;
if boardexist(sn) then begin
writeln ('Sorry! Board already exists!');
exit
end;
curboard.shortname:=sn;
writecurboard;
close (bfile);
close (ffile);
nfp:=boarddir+sn+'.';
nbf:=nfp+'BUL';
nff:=nfp+'FIL';
assign (qf,nbf);
erase (qf);
d:=ioresult;
assign (qf,nff);
erase (qf);
d:=ioresult;
rename (bfile,nbf);
rename (ffile,nff);
setfirstboard;
q:=9
end;
Procedure killboard;
VAR cnt:integer;
f:file;
fr:filerec;
bd:boardrec;
begin
writestr ('Kill board: Are you sure? *');
if not yes then exit;
writelog (5,10,'');
writeln (^B^M'Deleting messages...');
for cnt:=numbuls downto 1 do
begin
delbul(cnt,true);
write (cnt,' ')
end;
writeln (^B^M'Deleting files...');
for cnt:=numfiles downto 1 do
begin
seekffile (cnt);
read (ffile,fr);
assign (f,fr.fname);
erase (f);
if ioresult<>0 then writeln (^B'Error erasing ',fr.fname);
delfile (cnt);
write (cnt,' ')
end;
writeln (^B^M'Deleting sub-board files...');
close (bfile);
assignbfile;
erase (bfile);
if ioresult<>0 then writeln (^B'Error erasing board file.');
close (ffile);
assignffile;
erase (ffile);
if ioresult<>0 then writeln (^B'Error erasing file directory file.');
writeln (^M'Removing sub-board...');
delboard (curboardnum);
writeln (^B'Sub-board erased!');
setfirstboard;
q:=9
end;
Procedure sortboards;
VAR cnt,mark,temp:integer;
bd1,bd2:boardrec;
bn1,bn2:sstr;
bo:boardorder;
begin
writestr ('Sort sub-boards: Are you sure? *');
if not yes then exit;
Clear_order(bo);
mark := filesize(bdfile)-1;
REPEAT
IF mark <> 0 THEN begin
temp:=mark;
mark:=0;
for cnt:=0 to temp-1 do begin
seek (bifile,cnt);
read (bifile,bn1);
read (bifile,bn2);
if upstring(bn1)>upstring(bn2) then begin
mark:=cnt;
switchboards (cnt,cnt+1,bo)
end
end
end
until mark=0;
carryout (bo);
writelog (5,16,'');
setfirstboard;
q:=9
end;
Procedure orderboards;
VAR numb,curb,newb:integer;
bo:boardorder;
label exit;
begin
Clear_order(bo);
writehdr('Re-order sub-boards');
numb:=filesize (bdfile);
thereare (numb,'sub-board','sub-boards');
for curb:=0 to numb-2 do begin
repeat
writestr ('New board #'+strr(curb+1)+' [?=List, CR to quit]:');
if length(input)=0 then goto exit;
if input='?'
then
begin
listboards;
newb:=-1
end
else
begin
newb:=searchboard(input);
if newb<0 then writeln ('Not found! Please re-enter...')
end
until (newb>=0);
switchboards (curb,newb,bo)
end;
exit:
carryout (bo);
writelog (5,14,'');
q:=9;
setfirstboard
end;
Procedure addresident;
VAR f:filerec;
begin
writestr ('Filename (including path):');
if hungupon or (length(input)=0) then exit;
if devicename(input) then begin
writeln ('That''s a DOS device name !');
exit
end;
if not exist(input) then begin
writeln ('File not found.');
exit
end;
f.sentby:=unam;
f.fname:=input;
writestr ('Description:');
if length(input)=0 then exit;
f.descrip:=input;
f.downloaded:=0;
f.when:=now;
addfile (f);
writelog (5,15,f.fname)
end;
begin
if (not Sponsor_on) and (not issysop) then begin
writeln ('Nice try, except you aren''t the sponsor.');
exit
end;
writelog (4,3,curboard.boardname+' ['+curboard.shortname+']');
repeat
q:=menu ('Sponsor','SPONSOR','DLSTMWUEQRKC@BO@VA@H');
case q of
1:getautodel;
2:getblevel;
3:setsponsor;
4:getfiletitle;
5:movefile;
6:wipeoutfile;
7:setnameaccess;
8:setallaccess;
10:renameboard;
11:killboard;
12:sortboards;
13:movebulletin;
14:orderboards;
15:listaccess;
16:addresident;
17:help ('Sponsor.hlp')
end
until (q=9) or hungupon
end;