home *** CD-ROM | disk | FTP | other *** search
- {=============================================================================}
-
- 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;