{ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍ» Ë¿ÚËÍÍÍË¿ÚÉÍËÍ»¿ º º ³ÌÍÍÍÊÙÃÎÍÍÍδÀÊÍÍÍË¿³º º º³ÃÎÍÍ º º º ÀÊ ÀÊ ÊÙÀÊÍÍÍÊÙÀÊ ÈÍÊÙÀÊÍÍÍÊÙ Ê º º º º NetWare 3.11 API Library for Turbo Pascal º º by º º S.Perevoznik º º 1996 º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ } Unit NetInfo; Interface Uses NetConv; Function LogInNetWork : boolean; {True, if log in network} Function GetFileServerInformation(Var ServerName : string; Var NetWareVersion : byte; Var NetWareSubVersion : byte; Var MaximumConnectionsSupported : word; Var ConnectionsInUse : word; Var MaximumVolumesSupported : word; Var RevisionLevel : byte; Var SFTLevel : byte; Var TTSLevel : byte; Var PeakConnectionsUsed : word) : byte; {Return server information} Function GetServerName(Var ServerName : string) : byte; { Return server name} Function GetNetWorkSerialNumber(Var NetWorkSerialNumber : LongInt; Var ApplicationNumber : Integer) : byte; {Return network number and number application} Function SetFileServerDateAndTime(year : word; month : word; day : word; hour : word; minute : word; second : word) : byte; {Set server date and time} Function GetFileServerDateAndTime(Var year : word; Var month : word; Var day : word; Var hour : word; Var minute : word; Var second : word) : byte; {Get server date and time} Function GetConnectionNumber : byte; {Return current connection number} Function GetNumberOfLocalDrives : byte; {Get number of local disks} Function GetConnectionInformation(ConnectionNumber:byte; Var ObjectName : string; var ObjectType : word; var ObjectID : longint; var LoginTime : string): byte; {Return current connection information} Implementation uses DOS; Function GetFileServerInformation(Var ServerName : string; Var NetWareVersion : byte; Var NetWareSubVersion : byte; Var MaximumConnectionsSupported : word; Var ConnectionsInUse : word; Var MaximumVolumesSupported : word; Var RevisionLevel : byte; Var SFTLevel : byte; Var TTSLevel : byte; Var PeakConnectionsUsed : word) : byte; var r : registers; SendPacket : array[0..3] of byte; ReplyPacket : array[0..130] of byte; WordPtr : ^Word; begin SendPacket[2] := 17; WordPtr := addr(SendPacket); WordPtr^ := 1; WordPtr := addr(ReplyPacket); WordPtr^ := 128; r.BX := r.DS; r.AH := $0E3; r.DS := SEG(SendPacket); r.SI := OFS(SendPacket); r.ES := SEG(ReplyPacket); r.DI := OFS(ReplyPacket); intr($21,r); r.DS := r.BX; GetFileServerInformation := r.AL; if r.AL = 0 then begin move(ReplyPacket[2],ServerName[1],48); ServerName[0] := chr(48); NetWareVersion := ReplyPacket[50]; NetWareSubVersion := ReplyPacket[51]; move(MaximumConnectionsSupported,ReplyPacket[52],2); MaximumConnectionsSupported := Swap(MaximumConnectionsSupported); move(ConnectionsInUse,ReplyPacket[54],2); ConnectionsInUse := Swap(ConnectionsInUse); move(MaximumVolumesSupported,ReplyPacket[56],2); MaximumVolumesSupported := Swap(MaximumVolumesSupported); RevisionLevel := ReplyPacket[58]; SFTLevel := ReplyPacket[59]; TTSLevel := ReplyPacket[60]; move(PeakConnectionsUsed,ReplyPacket[61],2); PeakConnectionsUsed := swap(PeakConnectionsUsed); end; end; Function GetServerName(Var ServerName : string) : byte; var r : registers; SendPacket : array[0..3] of byte; ReplyPacket : array[0..130] of byte; WordPtr : ^Word; begin SendPacket[2] := 17; WordPtr := addr(SendPacket); WordPtr^ := 1; WordPtr := addr(ReplyPacket); WordPtr^ := 128; r.BX := r.DS; r.AH := $0E3; r.DS := SEG(SendPacket); r.SI := OFS(SendPacket); r.ES := SEG(ReplyPacket); r.DI := OFS(ReplyPacket); intr($21,r); r.DS := r.BX; GetServerName := r.AL; if r.AL = 0 then begin move(ReplyPacket[2],ServerName[1],48); ServerName[0] := chr(48); end; end; Function GetNetWorkSerialNumber(Var NetWorkSerialNumber : LongInt; Var ApplicationNumber : Integer) : byte; var r : registers; SendPacket : array[0..3] of byte; ReplyPacket : array[0..8] of byte; WordPtr : ^Word; begin SendPacket[2] := 18; WordPtr := addr(SendPacket); WordPtr^ := 1; WordPtr := addr(ReplyPacket); WordPtr^ := 6; r.BX := r.DS; r.AH := $0E3; r.DS := SEG(SendPacket); r.SI := OFS(SendPacket); r.ES := SEG(ReplyPacket); r.DI := OFS(ReplyPacket); intr($21,r); r.DS := r.BX; GetNetWorkSerialNumber := r.AL; if r.AL = 0 then begin NetworkSerialNumber := GetLong(addr(ReplyPacket[2])); ApplicationNumber := GetWord(addr(ReplyPacket[6])); end; end; Function SetFileServerDateAndTime(year : word; month : word; day : word; hour : word; minute : word; second : word) : byte; var r : registers; SendPacket : array[0..9] of byte; ReplyPacket : array[0..2] of byte; WordPtr : ^Word; begin WordPtr := addr(SendPacket); WordPtr^ := 7; SendPacket[2] := 202; SendPacket[3] := year; SendPacket[4] := month; SendPacket[5] := day; SendPacket[6] := hour; SendPacket[7] := minute; SendPacket[8] := second; WordPtr := addr(ReplyPacket); WordPtr^ := 0; r.BX := r.DS; r.AH := $0E3; r.DS := SEG(SendPacket); r.SI := OFS(SendPacket); r.ES := SEG(ReplyPacket); r.DI := OFS(ReplyPacket); intr($21,r); r.DS := r.BX; SetFileServerDateAndTime := r.AL; end; Function GetFileServerDateAndTime(Var year : word; Var month : word; Var day : word; Var hour : word; Var minute : word; Var second : word) : byte; var r : registers; ReplyPacket : array[0..7] of byte; WordPtr : ^Word; begin r.BX := r.DS; r.AH := $0E7; r.DS := SEG(ReplyPacket); r.DX := OFS(ReplyPacket); intr($21,r); r.DS := r.BX; GetFileServerDateAndTime := r.AL; Year := ReplyPacket[0]; Month := ReplyPacket[1]; Day := ReplyPacket[2]; Hour := ReplyPacket[3]; Minute := ReplyPacket[4]; Second := ReplyPacket[5]; end; Function LogInNetWork : boolean; var r : registers; begin LogInNetWork := false; r.AX := $7A00; Intr($2F,r); if r.AL = $00 then LogInNetWork := false else LogInNetWork := true; end; Function GetConnectionNumber : byte; var r : registers; begin r.BX := r.DS; r.AH := $DC; Intr($21,r); r.DS := r.BX; GetConnectionNumber := r.AL; end; Function GetNumberOfLocalDrives : byte; var r : registers; begin r.BX := r.DS; r.AH := $DB; Intr($21,r); r.DS := r.BX; GetNumberOfLocalDrives := r.AL; end; Function GetConnectionInformation(ConnectionNumber:byte; Var ObjectName : string; var ObjectType : word; var ObjectID : longint; var LoginTime : string): byte; var WordPtr:^Word; r:registers; SendPacket : array[0..4] of byte; ReplyPacket : array[0..64] of byte; begin SendPacket[2] := $16; SendPacket[3] := ConnectionNumber; WordPtr := addr(SendPacket); WordPtr^:=2; WordPtr := addr(ReplyPacket); WordPtr^ := 62; r.BX := r.DS; r.DX := r.ES; r.ah := $e3; r.ds := seg(SendPacket); r.si := ofs(SendPacket); r.es := seg(ReplyPacket); r.di := ofs(ReplyPacket); intr($21,r); r.DS := r.BX; r.ES := r.DX; GetConnectionInformation := r.al; if r.al = 0 then begin ObjectID := GetLong(addr(ReplyPacket[2])); ObjectType := GetWord(addr(ReplyPacket[6])); move(ReplyPacket[8],ObjectName[1],48); ObjectName[0] := chr(48); move(ReplyPacket[56],LoginTime[1],7); LoginTime[0] := chr(7); end; end; end.