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

    {
                ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
                º     ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍ» Ë¿ÚËÍÍÍË¿ÚÉÍËÍ»¿   º
                º     ³ÌÍÍÍÊÙÃÎÍÍÍÎ´ÀÊÍÍÍË¿³º º º³ÃÎÍÍ      º      º
                º     ÀÊ     ÀÊ   ÊÙÀÊÍÍÍÊÙÀÊ ÈÍÊÙÀÊÍÍÍÊÙ   Ê      º
                º                                                  º
                º     NetWare 3.11 API Library for Turbo Pascal    º
                º                      by                          º
                º                 S.Perevoznik                     º
                º                     1996                         º
                ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼
    }

    Unit NetMsg;

    Interface

    Const
      AllMessage        = 0;  { receive all message                   }
      ServerOnly        = 1;  { receive message from file server only }
      NoMessage         = 2;  { not receive messag                    }
      StoreMessage      = 3;  { store message                         }
      DisableCheckTimer = 5;  { disable check shell timer             }
      EnableCheckTimer  = 6;  { enable check shell timer              }

    Procedure SetBroadcastMode(Mode: byte);

    Procedure SendToCon(Msg:String);
    {send message to console }

    Procedure DisableMSG;
    { disable broadcast message}

    Procedure EnableMSG;
    { enable broadcast message }

    Function  GetBroadcastMode : byte;
    { return current broadcast mode }

    Function  SendBroadcastMessage(Message:string;
                                   ConnectionNumber:byte) : byte;
    { send broadcast message to station with
      connection number}

    Function  GetBroadcastMessage : String;

    Function LogNetWorkMessage(msg : string) : byte;
    {}

    Function OpenMessagePipe(ConnectionList  : string;
                             Var ResultList  : string;
                             ConnectionCount : byte) : byte;

    Function CloseMessagePipe(ConnectionList : string;
                             Var ResultList  : string;
                             ConnectionCount : byte) : byte;

    Function CheckPipeStatus (ConnectionList  : string;
                              Var ResultList  : string;
                              ConnectionCount : byte) : byte;

    Function  SendPersonalMessage(Message:string;
                                   ConnectionNumber:byte) : byte;

    Function  GetPersonalMessage (Var ConnectionNumber : byte): String;

    Implementation

    Uses Dos;

    Procedure SetBroadcastMode(Mode : byte);
     var
        r : registers;
     begin
        r.BX := r.DS;
        r.AH := $0DE;
        r.DL := MODE;
        intr($21,r);
        r.DS := r.BX;
     end;

    Function GetBroadcastMode : byte;
     var
       r : registers;
     begin
       r.AH := $0DE;
       r.DL := 4;
       Intr($21,r);
       GetBroadcastMode := r.AL;
     end;

    Procedure DisableMSG;
     var
       r : registers;
       SendPacket  : array[0..4] of byte;
       ReplyPacket : array[0..3] of byte;
       WordPtr     : ^word;
     begin
      SendPacket[2] := 2;
      WordPtr  := addr(SendPacket);
      WordPtr^ := 1;
      WordPtr  := addr(ReplyPacket);
      WordPtr^ := 2;
      r.BX := r.DS;
      r.AH := $0E1;
      r.DS := SEG(SendPacket);
      r.SI := OFS(SendPacket);
      r.ES := SEG(ReplyPacket);
      r.DI := OFS(ReplyPacket);
      intr($21,r);
      r.DS := r.BX;
     end;

    Procedure EnableMSG;
     var
       r : registers;
       SendPacket  : array[0..4] of byte;
       ReplyPacket : array[0..3] of byte;
       WordPtr     : ^word;
    begin
      SendPacket[2] := 3;
      WordPtr  := addr(SendPacket);
      WordPtr^ := 1;
      WordPtr  := addr(ReplyPacket);
      WordPtr^ := 2;
      r.BX := r.DS;
      r.AH := $0E1;
      r.DS := SEG(SendPacket);
      r.SI := OFS(SendPacket);
      r.ES := SEG(ReplyPacket);
      r.DI := OFS(ReplyPacket);
      intr($21,r);
      r.DS := r.BX;
    end;

    Function SendBroadcastMessage(Message:string; ConnectionNumber:byte) : byte;
      var
        WordPtr     : ^word;
        SendPacket  : array [0..160] of byte;
        ReplyPacket : array [0..103] of byte;

        r  : registers;

      begin
       SendPacket[2] := 0;
       SendPacket[3] := 1;
       SendPacket[4] := ConnectionNumber;
       SendPacket[5] := length(Message);
       if SendPacket[5] > 56 then SendPacket[5] := 56;
       move(Message[1],SendPacket[6],length(Message));
       WordPtr  := addr(SendPacket);
       WordPtr^ := Length(Message) + 4;
       WordPtr  := addr(ReplyPacket);
       WordPtr^ := 2;
       ReplyPacket[2] := 1;
       ReplyPacket[3] := 0;
       ReplyPacket[4] := 0;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         SendBroadcastMessage := r.AL;
     end;

    Procedure SendToCon(Msg : string);
    var
      s   : array [0..64] of byte;
      i   : integer;
      r   : registers;
    begin

      s[0] := 0;
      s[1] := 4;
      s[2] := $09;
      s[3] := length(Msg);
      if S[3] > 60 then S[3] := 60;
      move(Msg[1],s[4],length(Msg));
      r.AH := $0E1;
      r.BX := r.DS;
      r.DS := SEG(S);
      r.SI := OFS(S);
      Intr($21,r);
      r.DS := r.BX;
    end;

    Function LogNetWorkMessage(msg : string) : byte;
      var
        SendPacket  : array[0..84] of byte;
        ReplyPacket : array[0..2] of byte;
        r : registers;
        WordPtr     : ^word;

    begin
        SendPacket[2] := $0D;
        SendPacket[3] := Length(Msg);
        if Length(Msg) > 80 then SendPacket[3] := 80;
        move(Msg[1],SendPacket[4],SendPacket[3]);
        WordPtr  := addr(SendPacket);
        WordPtr^ := SendPacket[3] + 2;
        WordPtr  := addr(ReplyPacket);
        WordPtr^ := 0;
         r.AL := 0;
         r.AH := $E3;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         LogNetWorkMessage := r.AL;
    end;

    Function  GetBroadcastMessage : String;
      var
        r: registers;
        SendPacket  : array [0..3] of byte;
        ReplyPacket : array [0..58] of byte;
        WordPtr     : ^word;
        Len         : byte;
        St          : string;

      begin
        WordPtr  := addr(SendPacket);
        WordPtr^ := 1;
        SendPacket[2] := 1;
        WordPtr  := addr(ReplyPacket);
        WordPtr^ := 56;
        ReplyPacket[2] := 55;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         if r.AL = 0 then
          begin
            Len := ReplyPacket[2];
            move(ReplyPacket[3], st[1], Len);
            move(Len,st[0],1);
            GetBroadcastMessage := st;
          end;
        end;

    Function OpenMessagePipe(ConnectionList  : string;
                             Var ResultList  : string;
                             ConnectionCount : byte) : byte;
    { С®§¤ан¨¥ ªана«а ®¡¥на á®®¡é¥н¨ï¨ }
    var
        r: registers;
        SendPacket  : array [0..104] of byte;
        ReplyPacket : array [0..103] of byte;
        WordPtr     : ^word;

    begin
       SendPacket[2] := 6;
       SendPacket[3] := ConnectionCount;
       move(ConnectionList[1],SendPacket[4],ConnectionCount);
       WordPtr  := addr(SendPacket);
       WordPtr^ := ConnectionCount + 2;
       WordPtr  := addr(ReplyPacket);
       WordPtr^ := ConnectionCount + 1;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         if r.AL = 0 then
          move(ReplyPacket[3],ResultList[1],ConnectionCount);
          OpenMessagePipe := r.AL;
    end;

    Function CloseMessagePipe(ConnectionList : string;
                             Var ResultList  : string;
                             ConnectionCount : byte) : byte;
    { Заªàëâ¨¥ ªана«а ®¡¥на á®®¡é¥н¨ï¨ }
    var
        r: registers;
        SendPacket  : array [0..104] of byte;
        ReplyPacket : array [0..103] of byte;
        WordPtr     : ^word;
    begin
       SendPacket[2] := 7;
       SendPacket[3] := ConnectionCount;
       move(ConnectionList[1],SendPacket[4],ConnectionCount);
       WordPtr  := addr(SendPacket);
       WordPtr^ := ConnectionCount + 2;
       WordPtr  := addr(ReplyPacket);
       WordPtr^ := ConnectionCount + 1;
       ReplyPacket[2] := ConnectionCount;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         if r.AL = 0 then
          move(ReplyPacket[3],ResultList[1],ConnectionCount);
          CloseMessagePipe := r.AL;

    end;

    Function CheckPipeStatus (ConnectionList  : string;
                              Var ResultList  : string;
                              ConnectionCount : byte) : byte;
    { Пà®¢¥àªа á®áâ®ïн¨ï ªана«а ®¡¥на á®®¡é¥н¨ï¨ }
    var
        r: registers;
        SendPacket  : array [0..104] of byte;
        ReplyPacket : array [0..103] of byte;
        WordPtr     : ^word;
    begin
       SendPacket[2] := 8;
       SendPacket[3] := ConnectionCount;
       move(ConnectionList[1],SendPacket[4],ConnectionCount);
       WordPtr  := addr(SendPacket);
       WordPtr^ := ConnectionCount + 2;
       WordPtr  := addr(ReplyPacket);
       WordPtr^ := ConnectionCount + 1;
       ReplyPacket[2] := ConnectionCount;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         if r.AL = 0 then
          move(ReplyPacket[3],ResultList[1],ConnectionCount);
          CheckPipeStatus := r.AL;

    end;

    Function SendPersonalMessage(Message:string; ConnectionNumber:byte) : byte;
      var
        WordPtr     : ^word;
        SendPacket  : array [0..231] of byte;
        ReplyPacket : array [0..103] of byte;
        r  : registers;

      begin
       SendPacket[2] := 4;
       SendPacket[3] := 1;
       SendPacket[4] := ConnectionNumber;
       SendPacket[5] := length(Message);
       if SendPacket[5] > 126 then SendPacket[5] := 126;
       move(Message[1],SendPacket[6],length(Message));
       WordPtr  := addr(SendPacket);
       WordPtr^ := Length(Message) + 4;
       WordPtr  := addr(ReplyPacket);
       WordPtr^ := 2;
       ReplyPacket[2] := 1;
       ReplyPacket[3] := 0;
       ReplyPacket[4] := 0;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         SendPersonalMessage := r.AL;
     end;

    Function  GetPersonalMessage(Var ConnectionNumber: byte) : String;
      var
        r: registers;
        SendPacket  : array [0..3] of byte;
        ReplyPacket : array [0..132] of byte;
        WordPtr     : ^word;
        Len         : byte;
        St          : string;

      begin
        WordPtr  := addr(SendPacket);
        WordPtr^ := 1;
        SendPacket[2] := 5;
        WordPtr  := addr(ReplyPacket);
        WordPtr^ := 130;
         r.AH := $E1;
         r.BX := r.DS;
         r.DS := SEG(SendPacket);
         r.SI := OFS(SendPacket);
         r.ES := SEG(ReplyPacket);
         r.DI := OFS(ReplyPacket);
         Intr($21,r);
         r.DS := r.BX;
         if r.AL = 0 then
          begin
            Len := ReplyPacket[3];
            move(ReplyPacket[4], st[1], Len);
            move(Len,st[0],1);
            GetPersonalMessage := st;
          end
        else GetPersonalMessage := '';
        ConnectionNumber := ReplyPacket[2];
        end;

    end.

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