GROUP1.PAS

5 KB daf4985fbf270683…
{$I DIRECT.INC}

unit group1;

interface

uses gentypes;

Const CurGroup : Integer = 0;
Var   CG : GroupRec;

procedure selectgroup;
procedure deletegroup;
procedure listmembers;
procedure readdmember;
procedure removemember;
procedure setclass;
procedure setcreator;
procedure addbylevel;

implementation

uses dos, configrt, gensubs, subs1, userret, subs2, group, FileLock;

    procedure selectgroup;
    var n:integer;
        g:grouprec;
    begin
      delete (inpt,1,1);
      repeat
        if length(inpt)=0 then writestr (^R'Select group ['^A'?/List'^R'] : &');
        if length(inpt)=0 then exit;
        if inpt='?' then begin
          listgroups;
          n:=0;
          inpt[0]:=#0
        end else begin
          n:=lookupgroup (inpt);
          if n=0 then begin
            SendCr('Group not found!');
            exit
          end
        end
      until n>0;
      seekgfile (n);
      nread (gfile,g);
      if groupaccess(g) then begin
        curgroup:=n;
        cg:=g
      end else SendCr('You can''t access that group.')
    end;

    function nocurgroup:boolean;
    begin
      nocurgroup:=curgroup=0;
      if curgroup=0 then SendCr(^R'No group as been '^S'S'^R'elected!')
    end;

    function notcreator:boolean;
    var b:boolean;
    begin
      if nocurgroup then b:=true else begin
        b:=(unum<>cg.creator) and (not issysop);
        if b then SendCr('You aren''t the creator of this group!')
      end;
      notcreator:=b;
    end;

    procedure writecurgroup;
    begin
      seekgfile (curgroup);
      nwrite (gfile,cg)
    end;

    procedure deletegroup;
    var cnt:integer;
        g:grouprec;
    begin
      if notcreator then exit;
      WriteStr (^R'Delete group '^A+cg.name+^R'? !');
      if not yes then exit;
      writelog (13,2,cg.name);
      for cnt:=curgroup to filesize(gfile)-1 do begin
        seekgfile (cnt+1);
        nread (gfile,g);
        seekgfile (cnt);
        nwrite (gfile,g)
      end;
      seek (gfile,filesize(gfile)-1);
      truncate (gfile);
      curgroup:=0
    end;

    procedure listmembers;
    var cnt:integer;
    begin
      if nocurgroup then exit;
      SendCr(^R'Creator'^A':           '^S+lookupuname (cg.creator));
      SendCr(^R'Number of members'^A': '^S+Strr(cg.nummembers)+^M);
      for cnt:=1 to cg.nummembers do begin
        if break then exit;
        SendFull(^R);
        SendFull(NumJust(Cnt,2)+'. ');
        SendCr(^S+lookupuname (cg.members[cnt]))
      end
    end;

    procedure readdmember;
    var n:integer;
    begin
      if notcreator then exit;
      SendFull(^P'User to add'^O': ');
      InputBox(30);
      if length(inpt)=0 then exit;
      n:=lookupuser (inpt);
      if n=0
        then SendCr('User not found!')
        else begin
          addmember (cg,n);
          writecurgroup
        end
    end;

    procedure removemember;

      procedure removemembernum (n:integer);
      var cnt:integer;
      begin
        cg.nummembers:=cg.nummembers-1;
        for cnt:=n to cg.nummembers do cg.members[cnt]:=cg.members[cnt+1];
        writecurgroup;
        SendCr('Member removed.')
      end;

    var cnt,n:integer;
    begin
      if notcreator then exit;
      repeat
        writestr (^R'User to remove ('^S'?/List'^R'): &');
        if length(inpt)=0 then exit;
        if inpt='?' then begin
          inpt[0]:=#0;
          listmembers
        end
      until length(inpt)>0;
      n:=lookupuser (inpt);
      if n=0 then begin
        SendCr('User not found!');
        exit
      end;
      for cnt:=1 to cg.nummembers do if cg.members[cnt]=n then begin
        removemembernum (cnt);
        exit
      end;
      SendCr('User isn''t in the group!')
    end;

    procedure setclass;
    begin
      if notcreator then exit;
      SendCr('Current class: '^S+groupclassstr [cg.class]+^M);
      cg.class:=getgroupclass;
      writecurgroup
    end;

    procedure setcreator;
    var m:mstr;
        n:integer;
    begin
      if notcreator then exit;
      SendCr('Current creator: '^S+lookupuname(cg.creator)+^M);
      writestr ('Enter new creator: &');
      if length(inpt)=0 then exit;
      n:=lookupuser(inpt);
      if n=0 then begin
        SendCr('User not found!');
        exit
      end;
      cg.creator:=n;
      writecurgroup;
      if (n<>unum) and (not issysop) then curgroup:=0
    end;

    procedure addbylevel;
    var n,cnt:integer;
        u:userrec;
    begin
      if notcreator then exit;
      writestr ('Let in all people over level: &');
      n:=valu(inpt);
      if n=0 then exit;
      seek (ufile,1);
      for cnt:=1 to numusers do begin
        nread (ufile,u);
        if (length(u.handle)>0) and (u.level>=n) then begin
          if cg.nummembers=maxgroupsize then begin
            SendCr('Sorry, group is full!');
            exit
          end;
          addmember (cg,cnt)
        end
      end
    end;

begin
end.