q4x19xj
Toate functiile NetWare sint apelabile prin intermediul intreruperii software 21H, asemeni majoritatii functiilor DOS.
Subfunctiile folosite se afla in domeniul B6H-F3H.
Aceste functii apeleaza de fapt rutine din shell-ul retelei
(NETx.COM). Apelul lor fara a avea shell-ul de retea incarcat va intoarce cod de eroare de functie inexistenta.
Tipuri de date folosite de functiile NetWare
Tipurile de date folosite in cadrul retelei sint :
- BYTE - 8 biti;
- WORD - 16 biti in ordinea "High-Low" a octetilor;
- DWORD - 32 biti in ordines "High-Low" a cuvintelor;
O atentie deosebita trebuie acordata faptului ca ordinea octetilor respectiv a cuvintelor este inversa celei obisnuite in reprezentarea acelorasi tipuri de date in PC-uri. Singurele exceptii sint lungimile buferelor de cerere si de raspuns.
Este deci responsabilitatea programului ce apeleaza aceste functii sa converteasca in formatul cerut de retea tipurile de date WORD si DWORD inainte de apelul propruzis. De asemenea valorile WORD si DWORD intoarse de functiile NetWare ca raspuns, vor trebui convertite de programul de aplicatie in formatul intern al calculatorului pe care se lucreaza inainte de folosirea lor.
Transferul de parametri pentru functiile NetWare
Unele functii NetWare necesita pentru transferul de parametri doua bufere, unul de cerere si altul de raspuns.
Adresele acestor bufere se transmit prin registre. Buferul de cerere contine informatii ce vor fi trimise pe retea. Buferul de raspuns contine informatii furnizate de retea ca raspuns.
In cadrul acestor bufere nu trebuie sa existe octeti nefolositi (ce ar putea rezulta din alinierea datelor de tip WORD sau DWORD). Toate tipurile de date, inclusiv buferul in sine sint alocate trebuiesc alocate in memorie aliniate lanivel de octet.
Acest lucru devine foarte important atunci cind se doreste apelarea acestor functii din limbaje de nivel inalt, caz in care alocarea structurilor de date este specifica compilatorului folosit.
Buferul de cerere
Adresa buferului de cerere este transmisa prin perechea de registre DS:SI. Primii doi octeti din acest buffer trebuie sa contina numarul de octeti al restului pachetului. Aceasta valoare nu va include deci primii doi octeti. Acest cuvint trebuie specificat in formatul specific calculatorului "Low-High"
(singura execptie de la regula de mai sus).
Buferul de raspuns
Adresa buferului de cerere este transmisa prin perechea de registre DS:SI. Primii doi octeti din acest buffer trebuie sa contina numarul de octeti rezervati pentru restul pachetului.
Aceasta valoare este folosita de shell-ul retelei si trebuie sa fie suficient de mare pentru a putea cuprinde raspunsul dat de retea. Acest cuvint trebuie specificat in formatul specific calculatorului "Low-High" (singura execptie de la regula de mai sus). Lungimea buferului de raspuns trebuie initializata totdeauna cu numarul de octeti rezervati in acest scop, chiar daca shell-ul nu intoarce nimic ca raspuns.
Servicii de comunicatie prin mesaje
Serviciile de comunicatie prin mesaje permit programelor de aplicatie: a) sa emita mesaje de 1 pina la 55 de octeti vederea difuzarii la mai multe destinatii; b) sa stabileasca unul sau mai multe canale de mesaje cu anumite statii de lucru, legate la acelasi file server. Un astfel de canal ofera posibilitatea transmiterii de mesaje de 1 pina la 126 de octeti.
Difuzarea de mesaje si comunicatia prin canale folosesc serverul ca intermediar.
Pentru serviciile de difuzare a mesajelor, fiecare coonexiune a unui file server are asociat un buffer de 55 de octeti; pentru serviciul de comunicatie prin canale, serverul mentine pentru fiecare conexiune o coada de mesaje (capacitatea maxima a cozii este de 6 mesaje).
In mod normal, odata ce o conexiune trimite un mesaj spre difuzare catre o alta conexiune, acesta este depus in in coada de mesaje primite ale conexiunii destinatare, de unde este preluat de shell-ul statiei destinatare si afisat pe linia cea mai de jos
(a 25-a linie) a ecranului.
Functiile de comunicare prin mesaje sint folosite de programele utilitare SEND, CASTON si CASTOFF, care se folosesc pentru a emite mesaje in vederea difuzarii, a permite sau a inhiba receptionarea mesajelor difuzate.
Functii puse la dispozitie de Shell.
E1h(09h) BroadcastToConsole
Trimite un mesaj care va fi afisat la consola serverului implicit.
E1h(08h) CheckPipeStatus
Determina starea uneia sau a mai multor canale de mesaje.
E1h(07h) CloseMessagePipe
Inchide unul sau mai multe canale de mesaje.
E1h(01h) GetBroadcastMessage
Preia un mesaj transmis prin difuzare. Apelarea acestei functii are sens numai daca modul de tratare a mesajelor difuzate este 2 sau 3.
DEh(04h) GetBroadcastMode
Permite aflarea modului curent de tratare a mesajelor difuzate.
E1h(05h) GetPersonalMessage
Preia un mesaj din coada de mesaje asociata statiei de lucru.
E3h(0Dh) LogNetworkMessage
Depune un mesaj in fisierul NET$LOG.MSG al serverului implicit. Inregistrarea din fisier va avea urmatorul format: luna/zi/an ore:minute STN numar_statie: mesaj
Functia poate fi utilizata de utilitare sau de programe de aplicatie care au nevoie sa intregistreze informatii, de exemplu cu scopul de a le folosi pentru contabilitate.
E1h(06h) OpenMessagePipe
Creaza o jumatate de canal de comunicatie intre statia de lucru si una sau mai multe conexiuni; cealalta jumatate a canalului (canalelor) trebuie create de conexiune (conexiunile) destinatara, cu ajutorul aceleiasi functii.
E1h(00h) SendBroadcastMessage
Trimite un mesaj spre difuzare la un numar de conexiuni de pe acelasi server.
E1h(04h) SendPersonalMessage
Trimite un mesaj catre una sau mai multe conexiuni cu care statia de lucru a deschis canale de mesaje.
DEh SetBroadcastMode
Stabileste modul in care sint tratate mesajele difuzate destinate acestei statii de lucru.
Exemplul 1
Programul SNDHELLO trimite mesajul "Hello !" catre toate conexiunile active. Se comporta deci exact ca si comanda :
SEND "Hello !" to EVERYONE
Se va folosi functia de difuzare de mesaje :
SendBroadcastMessage
Parametri :
Intrare : +---------------------------------------------------+
| Registru | Continut |
|---------------------------------------------------|
| AH | E1h |
| DS:DI | Adresa buferului de cerere |
| ES:SI | Adresa buferului de raspuns |
+---------------------------------------------------+
Iesire : +---------------------------------------------------+
| Registru | Continut |
|---------------------------------------------------|
| AL | Cod eroare (00h = succes) |
+---------------------------------------------------+
Bufer +---------------------------------------------------+ cerere : | Tip | Continut |
|---------------------------------------------------|
| WORD lo-hi | Lungimea buferului |
| BYTE | 00h - numar subfunctie |
| BYTE | nr - Numarul de conexiuni (1..100) |
| BYTE anri | Lista de conexiuni unde se va trimi- |
| | te mesajul |
| BYTE | lg - Lungimea mesajului (1..55) |
| BYTE algi | Mesaj (sir caractere ASCII) |
+---------------------------------------------------+
Prima versiune a acestui program este scrisa in Limbaj de
Asamblare.