+-------------------------+
                         | Služby IPX-SPX rozhraní |
                         +-------------------------+

                        Zjištění přítomnosti ovladače

           IPX  se  vždycky  nalepí  na Multiplexní přerušení dosu int 2Fh
      Toho využijeme pro zjištění přítomnosti a vstupního bodu ovladače.

      Vstup:   AX = 7A00h
               int  2Fh

      Výstup:  AL = 0    - Není instalován

               AL = 0FFh - Je instalováno
               ES:DI     - Segmen:offset na ovladač

           Když  se  vrátí  v  AL  hodnota  0FFh, musíme si schovat obsahy
      registrů  ES  a DI, ve kterých je adresa na ovladač. Další služby se
      nevolají  pomocí  přerušení,  ale  právě  jako far procedura na této
      adrese.  Další  funkce  se volají pomocí této far procedury. POZOR !
      Všechny  volání ruší obsahy registrů ! (Podíval sem se do příkladů a
      zjistil,  že  ten  ovladač  se  může  volat i přerušením 7Ah. Nevím,
      jestli  to  bude  fungovat všude, ale já to používám všude a jede to
      dobře)  Tuto  kapitolu  jsem  rozdělil na dvě části. V první najdete
      nejdůležitější funkce, v té druhé ty pokročilé a nebo jejihž použití
      mi uniká. Třeba někdo příjde na to, k čemu vlastně jsou.

       Seznam služeb:

       0.  Otevření soketu
       1.  Uzavření soketu
       2.  Zjištění nejvýhodnějšího prostředníka
       3.  Vyslání IPX paketu
       4.  Příjem IPX paketu
       5.  Naplánování události IPX
       6.  Zrušení události
       7.  Naplánování speciální události
       8.  Přečtení hodnoty čítače časových událostí
       9.  Získání celé mezisíťové adresy
       10. Ukončení práce driveru
       12. Inicializace síťové adresy
       13. Zjištění délky IPX paketu
       14. Zrušení soketů
       15. Vnitřní vyslání IPX paketu

       I. Životně (programátorsky) důležité

       ----------------------------------------------------
       Funkce 0 - Otevření soketu
       ----------------------------------------------------

       Vstup:   BX  =  0000h
                AL  =  Způsob otevření
                    00h -  soket bude otevřen do uzavření a nebo do ukončení
                           programu
                    0FFh - bude otevřen až do uzavření. Konec programu nemá
                           na  soket vliv. (používá se pro rezidenty)
                DX  =  číslo soketu (v obráceném pořadí, vyšší byte je v DL)
                DX  = 0000h - dynamické přidělení (nejspíš ten, který je
                              volný, po návratu je číslo soketu v DX)



       Výstup:  AL  = 00h  - v pořádku
                      0FEh - tabulka soketů je plná
                      0FFh - soket je už otevřen

                Po nastavení registrů zavoláte call far na adresu vrácenou
                v ES:DI po inicializaci int 2Fh. Soket, který je už otevřený
                a používá jej jiná aplikace můžete také používat, ale potom
                příjemnou zábavu při třídění paketů :-).

                Kromě far call můžete použít ještě int 7ah

       ------------------------------------------------
       Funkce 1 - Zavření soketu
       ------------------------------------------------

       Vstup:   BX  =  0001h
                DX  =  číslo soketu (v obráceném pořadí, vyšší byte je v DL)

       Výstup:  nic

       Po skončení by jste měli všechny sokety uzavřít, aby je mohly
       používat další programy.

       ------------------------------------------------
       Funkce 3 - Vyslání IPX paketu
       ------------------------------------------------

       Vstup:   BX  =  0003h
                ES:DI = Ukazuje na strukturu ECB. Bude popsaná dále.
                        Je to pole parametrů s informacemi o cíli,
                        soketu ...

       Výstup:  nic

       Zařadí toto ECB do seznamu odesílaných paketů a co nejřív tento
       paket pošle. V době čekání na poslání je nastaven příznak který
       znamená, že tento blok je používán driverem.

       ------------------------------------------------
       Funkce 4 - Příjem IPX paketu
       ------------------------------------------------

       Vstup:   BX  =  0004h
                ES:DI = Ukazuje na strukturu ECB.

       Výstup:  nic

       Zařadí tento ECB do seznamu čekající na příjem paketu. Když dorazí
       paket, vynuluje se příznak a zavolá procedura ESR.(takové přerušení,
       které si můžete sami nastavit a obsluhovat)

       ------------------------------------------------
       Funkce 6 - Zrušení události
       ------------------------------------------------

       Vstup:   BX  =  0006h
                ES:DI = Ukazuje na strukturu ECB.

       Výstup:  AL = 00h  - zrušeno v pořádku
                     0F9h - událost je právě zpracovávána
                     0FFh - chyba, na  tomto se nepracuje

       Touto funkcí se dá zrušit vyslání\příjem IPX\SPX paketu nebo
       časovač.

       ------------------------------------------------
       Funkce 9 - Získání celé mezisíťové adresy
       ------------------------------------------------

       Vstup:   BX  =  0009h
                ES:SI -> adresa bufferu o délce 10 byte

       Výstup:  ES:SI -> mezisíťová adresa

       Tato funkce vrátí celou mezisíťovou adresu pracovní stanice.
       Tuto adresu můžete použít pro nastavení konkrétních adres
       cílovývch stanic.


       II. Pokročilé a podivné

       ------------------------------------------------
       Funkce 2 - zjištění nejvýhodnějšího prostředníka
       ------------------------------------------------

       Vstup:   BX  =  0002h
                ES:DI -> cílová mezisíťová adresa stanice
                ES:DI -> 6 - byte buffer pro umístění adresy prostředníka

       Výstup:  AL = 00h úspěšné provedení funkce
                     0FAh  nebyla zjištěna adresa prostředníka
                CX - očekávaná doba pro poslání jednoho paketu (576 byte)
                     do cílového uzlu (v hodinových intervalech)
                ES:DI -> lokální adresa prostředníka (nebo přímo uzlu)

       Tato funkce mi není uplně jasná, můžete si přečíst její doslovný
       přepis:

       Tato funkce zjistí cílovou adresu paketu v lokální síti podle celé
       mezisíťové adresy. Je-li příjemce paketu fyzicky připojen na stejné
       lokální síti, je adresa lokálního cíle paketu stejná s adresou
       tohoto uzlu. Jinak adresa lokálního cíle paketu je uzlová adresa
       mostu, který paket přenese do cílové adresy.

       ------------------------------------------------
       Funkce 5 - Naplánování událostí IPX
       ------------------------------------------------

       Vstup:   BX  =  0005h
                AX  =  doba čekání
                ES:DI = Ukazuje na strukturu ECB.

       Výstup:  nic

       Touto funkcí si můžete plánovat jakýsi časovač. Po uplynutí
       nastaveného času se zavolá procedura ESR definovaná v ECB.

       ------------------------------------------------
       Funkce 7 - Naplánování speciální události IPX
       ------------------------------------------------

       Vstup:   BX  =  0007h
                AX  =  doba čekání
                ES:DI = Ukazuje na strukturu ECB.

       Výstup:  nic

       Podobné jako předchozí služba 05, ale tato je asi něčím speciální.
       Zatím ale nevím čím :-).

       ------------------------------------------------
       Funkce 10 - Ukončení práce driveru
       ------------------------------------------------

       Vstup:   BX  =  000Ah

       Výstup:  nic

       Tato funkce zakáže síťovému driveru vykonávat nějakou činost.
       Nikdy jsem to nepoužil, třeba to k něčemu bude.

       ------------------------------------------------
       Funkce 12 - inicializace síťové adresy
       ------------------------------------------------

       Vstup:   BX  =  000Ch
                CX:DX - Globální adresa sítě  - ??????
                ES:DI - Flag "OSINCRITICALSECTION"
                DS:SI - režim otevření soketu

       Výstup:  nic

       Doslovný přepis funkce:

       Adresa nemůže být změněna, dokud nebyla provedena její inicializace.

       (Ano, opravdu v literatuře o tom víc není ani zmínka. Nemám vůbec
       představu o práci této funkce.)

       ------------------------------------------------
       Funkce 13 - Zjištění délky IPX paketu
       ------------------------------------------------

       Vstup:   BX  =  000Dh

       Výstup:  AX  =  maximální délka paketu
                CX  =  časový interval potvrzování - ???

       Vrátí maximální délku paketu. Většinou to je 576 byte
       včetně hlavičky.

       ------------------------------------------------
       Funkce 14 - Zrušení soketů
       ------------------------------------------------

       Vstup:   BX  =  000Eh

       Výstup:  nic

       Zruší všechny dočasné sokety otvřené jako dočasné. (Ty, které
       se samy uzavírají po skončení programu.) V některých verzích
       mohou být uzavřeny všechny sokety.

       ------------------------------------------------
       Funkce 15 - Vnitřní služba vyslání IPX paketu
       ------------------------------------------------

       Vstup:   BX  =  000Fh
                ES:SI - ukazatel na ECB

       Výstup:  nic

       Podobné jako funkce 3, ale neumožňuje posílání víc fragmentů
       v jednom paketu.


            výheň