[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]

    {
    >To anyone that can help me, this is my problem: I want to program a simple
    >E-Mail program for Novel Network v2.1.  But i have one problem.  While in
    >a pascal programmed program, how do i find out the user login name
    >automatically?

    I tested this code on Novell 3.11, but the API calls should also work on your
    2.1 network.  The login time is also available as a by-product.
    }

    program ShowUser;

    uses Dos;

    type
      NovTime = record
        LoginYear  : byte;       { 0 to 99; if < 80, year is in 21st century }
        LoginMonth : byte;       { 1 to 12 }
        LoginDay   : byte;       { 1 to 31 }
        LoginHour  : byte;       { 0 to 23 }
        LoginMin   : byte;       { 0 to 59 }
        LoginSec   : byte;       { 0 to 59 }
        LoginDOW   : byte;       { 0 to 6, 0 = Sunday, 1 = Monday ... }
      end;

    { GetConnInfo --------------------------------------------------------------}
    { -----------                                                               }

    function GetConnInfo(     Connection : Byte;
                          var ConnName   : string;
                          var ConnTime   : NovTime ) : Byte;
    VAR
      NameArray : array[ 0..48 ] of Byte absolute ConnName;
      NovRegs   : Registers;

      Request : record
        Len   : Word;
        Func  : Byte;
        Conn  : Byte
      end;

      Reply    : record
        Len    : Word;
        ID     : Longint;
        Obj    : Word;                        { Object type }
        Name   : array[ 1..48 ] of Byte;
        Time   : NovTime;
        Filler : Byte       { Isn't in my Novell docs, but won't work without!  }
      end;

    begin
      with Request do                      { Initialize request buffer:         }
      begin
        Len := 2;                                    { Buffer length,           }
        Func := $16;                                 { API function,            }
        Conn := Connection                           { Connection # to query    }
      end;

      Reply.Len := SizeOf( Reply ) - 2;    { Initialize reply buffer length     }

      with NovRegs do
      begin
        AH := $E3;                         { Connection Services API call       }
        DS := Seg( Request );              { Location of request buffer         }
        SI := Ofs( Request );
        ES := Seg( Reply );                { Location of reply buffer           }
        DI := Ofs( Reply );
        MsDos( NovRegs );                  { Make the call                      }
        GetConnInfo := AL                  { Completion code is function result }
      end;

      with Reply do
      begin
        Obj := Swap( Obj );                          { If object is a user and  }
        if ( Obj = 1 ) and ( NovRegs.AL = 0 ) then   {   call was successful,   }
        begin
          ConnTime := Time;                          { Return login time        }
          Move( Name, NameArray[ 1 ], 48 );          { Convert ASCIIZ to string }
          NameArray[ 0 ] := 1;
          while ( NameArray[ NameArray[ 0 ] ] <> 0 )
                and ( NameArray[ 0 ] < 48 ) do
            Inc( NameArray[ 0 ] );
          Dec( NameArray[ 0 ] )
        end
      end
    end;

    { GetConnNo ----------------------------------------------------------------}
    { ---------                                                                 }

    function GetConnNo : byte;

    var
      NovRegs : Registers;

    begin
      NovRegs.AH := $DC;
      MsDos( NovRegs );
      GetConnNo := NovRegs.AL
    end;

    { MAIN =====================================================================}
    { ====                                                                      }

    var
      UserName  : string;
      LoginTime : NovTime;

    begin
      GetConnInfo( GetConnNo, UserName, LoginTime );
      WriteLn( 'User''s name is ', UserName )
    end.

[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]