Contributor: MARTIN WOODS

{
16 Dec 95 18:41, Adam Rutter wrote to Martin Woods:
 AR> ok, well I wanted to know how to CREATE an account in the RA
 AR> userbase.. sorry if I was unclear.. I said I wanted to know both,
 AR> but I know how to read from it already.. if you could post some
 AR> source on creating a user record I would appreciate it... thanks.

{ This is similar to the viewer except it will allow editing of the security
level and writes the new value to the users.bbs,using this as a guide you
could edit each of the other fields in the same way,I would suggest you copy
a users.bbs file into the current work dir to play with first: see main below
}
Program RA_Security_Edit;
Uses Crt, Dos;
{$I c:\ra\STRUCT.200}
Var
   UserRec : USERSrecord;
   UserFile : File of USERSrecord;
   SysPath,UserPath,ConfigPath : String;
   SysRec: CONFIGrecord;
   SysFile : File of CONFIGrecord;
   X,a : Integer;
   Done : Boolean;
   Ch : Char;

Function FixPath(Path : String): String;
  Begin
    If Path[Length(Path)] <> '\' Then
        Path := Path+'\';
     FixPath := Path;
   End;

procedure drawscreen;
begin;
   textattr:=14;
   gotoxy(25,1);
   write(' Remote Access Security Edit');
   textattr:=$01;
   gotoxy(1,2);
   for a:=1 to 80 do write('');
   gotoxy(1,23);
   for a:=1 to 80 do write('');
   textattr:=15;
   gotoxy(3,24);
   Write('(PgUp) Last User    (PgDn) Next User    (C)hange Security   (ESC)
Exit');end;

Procedure Write_New_Record;
  begin
    gotoxy(2,24);clreol;
    write('Levels: [L]ockout, [U]nvalidated, [R]egular, [V]ip, [S]ysop. ?');
    repeat ch := upcase(readkey) until ch in ['L','U','R','V','S'];
      case ch of
        'L' : UserRec.security := 0;
        'U' : UserRec.security := 10;
        'R' : UserRec.security := 150;
        'V' : UserRec.security := 2000;
        'S' : UserRec.security := 65535;
      end;
          gotoxy(1,24); clreol;
          writeln('Writing User File One Moment...');
          delay(450);
          {$I-}
          seek(userfile,X);
          write(userfile,UserRec);
          {$I+}
       end;

Begin {main}
   ClrScr;
   SysPath := GetEnv('RA');           {[drive]:\RA}
       SysPath := Fixpath(SysPath);   {[drive]:\RA\}
       ConfigPath := SysPath + 'CONFIG.RA'; {[drive]:\RA\CONFIG.RA}

   {$I-}
   Assign(SysFile,ConfigPath);
   Reset(SysFile);
    {$I+}
    If IOresult <> 0 then Begin
    WriteLn(' Error Reading ',ConfigPath);
    WriteLn(' Exiting with Errorlevel 1');
    Halt(1);  {Exit at errorlevel 1,[drive]:\RA\CONFIG.RA not Found}
    End;      {Is the enviroment variable set?}

   read(SysFile,SysRec); {open up CONFIG.RA and find the Path to the}
                         { Messsage base,(where users.bbs is stored) }
   Close(SysFile);
   UserPath := FixPath(SysRec.MsgBasePath);
   UserPath:=UserPath + 'USERS.BBS';
   {$I-}
> Assign(UserFile,{UserPath}'USERS.BBS'); { <- Copy a USERS.BBS file into the
} Reset(UserFile);                        { current dir to play with before
}   {$I+}                                 { you comment out UserPath
}    If IOresult <> 0 then Begin
     WriteLn(' Error Reading ',UserPath);
     WriteLn(' Exiting with Errorlevel 2');
     Halt(2);{Exit At Errorlevel 2,[drive]:\Msgbase\Users.bbs not found}
    End;
   X := 0;
   Done := False;
Repeat
   textattr:=$07;
   ClrScr;
   Seek(UserFile, X);
   Read(UserFile, UserRec);
   gotoxy(1,3);
   with UserRec do
   Begin
   Writeln;
   Writeln('  User #    : ',X+1);
   Writeln('  Name      : ',Name);
   Writeln('  Handle    : ',Handle);
   WriteLn('  Security  : ',Security);
   WriteLn('  Location  : ',Location);
   WriteLn('  Data #    : ',DataPhone);
   WriteLn('  Home #    : ',VoicePhone);
   WriteLn('  Birthday  : ',BirthDate);
   Write('  Last Call : ',LastDate);
   WriteLn(' ',Lasttime);
          case Sex of
               1 : writeln ('  Sex       : Male');
               2 : writeln ('  Sex       : Female');
              else writeln ('  Sex       : Unknown');
            end;
   writeln('  Number of Calls :',NoCalls);
   end; {with}
    drawscreen;
    Ch := Readkey;
   if (ch=#0) then ch:=upcase(readkey);
   Case ch Of
     #81 : If X < FileSize(UserFile)-1 Then Inc(X);
     #73 : If X > 0 Then Dec(X);
     #27 : Done := True;
     #99 {'C'} : Write_New_Record;
 end;
   Until done;
    Close(UserFile);
    textattr:=$07;
    clrscr;
 End.