{ 浜様様様様様様様様様様様様様様様様様様様様様様様様融 數様曜笥僕様某數様曜笥僕 某數様曜笥浜僕賛 殻様擁拊陵様隆席様曜審 些知様 席 席 勉席様擁拈 藩勉席様擁 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.