V predchádzajúcom článku o funkciách Novell NetWare (testované na
verzii 3.11) sme si ukázali spôsob zistenia podrobných informácií
o objekte. Ďalšou funkciou bude posielanie správ jednotlivým
prihláseným objektom, ktorú určite využijete vo svojich sieťových
programoch.
Posielanie správ v sieti NetWare zabezpečuje služba E1h a funkcia
00h. Pri volaní tejto služby musíme poznať číslo spojenia
objektu, ktorému chceme správu posielať. Správa je textový
reťazec, ktorý obsahuje bežne zobraziteľné znaky. Jej dĺžka môže
byť maximálne 55 znakov. Pri vstupnom bufri sa zastavím pri dvoch
údajoch (ostatné je dúfam jasné z programu a jeho popisu). Do
položky COUNT udávame počet objektov ktorým chceme správu poslať.
COUNT by mal mať minimálnu hodnotu 1. Ak má COUNT hodnotu vätšiu
ako 1, musí sa zmeniť typ položky LIST. Táto totiž obsahuje
zoznam čísiel spojenia objektov, na ktoré chceme správu poslať.
Preto ak COUNT > 1, LIST bude typu ARRAY[1..COUNT] OF BYTE.
Napríklad:
Ak COUNT je 1 - LIST: BYTE;
Ak COUNT ne vätšia ako 1 - LIST: ARRAY[1..COUNT] OF BYTE
Obdobne je to aj vo výstupnom bufri pri položkách ERRCOUNT
a ERRLIST. Po vykonaní prerušenia máme v ERRCOUNT počet chybne
poslaných správ a v položke ERRLIST zoznam čísiel chýb pre
jednotlivé čísla spojenia (ak je COUNT viac ako 1). Typ ERRLIST
sa mení podľa veľkosti COUNT, ako je to u položky LIST vstupného
bufru. Podrobný komentár k programu je súčasťou zdrojového
programu.
Pozn. red.: Sérii článků Ako na sieťové funkcie naleznete v
úplné podobě na našem Webu na adrese XXXXXXXXXXXXXXXXXXXXXX.
***********
Program Send;
{ posiela správu prihlásenému }
{ objektu (Novell NetWare 3.11) }
{ (c) Štefan Stieranka }
uses Dos;
type
TInpBuf = record
{ dĺžka vstupného bufru }
LenBuf: Integer;
{ číslo funkcie }
FuncNum: Byte;
{ počet staníc }
Count: Byte;
{ číslo stanice (zoznam) }
List: Byte;
{ dĺžka správy }
MsgLength: Byte;
{ správa }
Msg: Array[1..55] of Byte;
end;
TOutBuf = record
{ dĺžka výstupného bufru }
LenBuf: Integer;
{ počet chýb }
ErrCount: Byte;
{ výsledný kód zasielania správy }
ErrList: Byte;
end;
var
InpBuf: TInpBuf;
OutBuf: TOutBuf;
Stat, Res: Integer;
Msg: String;
Procedure SendMsg(Station: Integer;
Message: String; var Result: Integer);
{ posiela správu užívatelovi
podla stanice prihlásenia }
var
Reg: Registers;
I: Integer;
begin
{ max. dĺžka spr¦vy - 55 znakov }
If Length(Message) > 55 then
Message := Copy(Message,1,55);
With InpBuf do
begin
LenBuf := 59;
{ 00h - pošli správu }
FuncNum := $00;
Count := 1;
List := Station;
FillChar(Msg, SizeOf(Msg), $0);
{ dĺžka správy }
MsgLength := Length(Message);
For I := 1 to Length(Message) do
Msg[I] := Ord(Message[I]);
end;
With OutBuf do
begin
LenBuf := 2;
ErrCount := 1;
ErrList := 0;
end;
{ číslo služby }
Reg.AH := $E1;
Reg.DS := Seg(InpBuf);
Reg.SI := Ofs(InpBuf);
Reg.ES := Seg(OutBuf);
Reg.DI := Ofs(OutBuf);
MsDos(Reg);
{ výsledok }
Result := OutBuf.ErrList;
end;
begin
Write('Text správy: ');
Readln(Msg);
Write('Pre stanicu: ');
Readln(Stat);
SendMsg(Stat, Msg, Res);
If Res <> 0 then
Writeln('Chyba posielania správy !');
end.