;Odeslani packetu metodou "broadcast" do packetu 5555h ;Kompilujte pomoci tasm tst_odes.asm ; tlink /t tst_odes.asm P286 MODEL TINY ORG 100h usedsocket = 5555h ;Pouzity soket DATASEG ECB STRUC ; ECB struktura pro odesilani paketu Link DD 0 ;Link - nemusi se vyplnovat ESR DD 0 ;Adresa na ESR, v tomto pripade 0 - nepouziva ji InUse DB 0 ;Priznak pouzivani CompCod DB 0 ;Priznak statusu dokoceni Socket DW usedsocket ;pouzity soket IPXwspc DB 4 dup (0) ;Rezervovano DRVwspc DB 12 dup (0) ;Rezervovano LocNoAd DB 6 dup (0FFh) ;Adresa prijemce, 0FFFFFFFFh -> posli to vsem FragCnt DW 1h ;Pocet fragmentu, v tomto pripade jeden FragDta DW 0 ;Adresa prijmanych\vysilanych dat DW 0 FragSiz DW 200 ;Preddefinovana delka paketu ECB ENDS IPXhead STRUC Checksum DW 0FFFFh ;vsechno ve formatu vysi-nisi ! Length_t DW 0 ;Nastavi IPX Transpctrl DB 0 ;Nastavi IPX packettype DB 0 ;vnitrni potreba ipx destnetw DB 4 dup (0) ;cilova sit destnode DB 6 dup (0ffh) ;cilova adresa -> vsem destsckt DW usedsocket ;do jakeho soketu srcenetw DB 4 dup (0) ;zdrojove hodnoty srcenode DB 6 dup (0FFh) ;Nemusi se inicializovat srcesckt DW usedsocket IPXhead ENDS ; Makro pro srovnani segmentovych registru STEJNESEG MACRO mov ax,cs mov es,ax mov ds,ax ENDM ; Struktura ECB vysilaci, nastavi se offset na paket ipx ECBs ECB <,,,,,,,,,offset ipxs,,> ;zdrojovy ECB ;------- IPX protokol ------------------------ IPXs IPXhead <> ;Pripoj hlavicku Delkas DB 255 ;Toto jsou uz data, delka paketu sdelkas DB 0 Datas DB 532 Dup (0) TotoPSP DW 0 ; promena pro nastaveni segmentu neni_ipx DB "Neni instalovano IPX rozhrani",10,13,"$" Napis_text DB "Napis zpravu:$" Oteviram_socket DB "Oteviram komunikacni socket socket 0x5555",10,13,"$" Uz_je_otevren DB "Socket 0x5555 je uz otevren.$" CODESEG STARTUPCODE mov ax,7A00h ;Detekuj pritomnost IPX rozhrani int 2Fh cmp al,0FFh je install mov dx,offset neni_ipx ;Vytiskni hlasku mov ah,09h int 21h jmp konec install: mov al,0FFh ;Otevri socket mov bx,0 mov dx,usedsocket int 7ah or al,al ;Je chyba pri otevreni socketu ? je otevren cmp al,0FFh jne konec mov dx,offset uz_je_otevren mov ah,09h int 21h jmp je_uz_otevren otevren: mov ah,09h mov dx,offset oteviram_socket int 21h je_uz_otevren: stejneseg mov totopsp,ax ;Zjisti hodnoty segmentu a zadej je jako mov [ECBs.FragDta+2],ax ;druhou cast adresy IPX protokolu ; do ECB bloku mov ah,09h mov dx,offset napis_text int 21h mov delkas,255 ;Pomoci sluzby 0Ah nacti vstupni mov dx,offset delkas;retezec a prekopiruj jej do paketu mov ax,0A00h int 21h mov al,sdelkas xor ah,ah inc ax mov cx,ax mov si,offset DataS mov di,offset delkas rep movsb add ax,30 mov ECBs.FragSiz,ax ; Nastav delku fragmentu mov si,offset ECBs ;Uprav hodnoty v strukture ECB mov word ptr [si+4],0 mov word ptr [si+6],0 mov word ptr [si+22h],1 mov bx,3 ;Odesli paket do site pomoci sluzby push si ;c.3 push es int 7ah pop es pop si neodeslal: ; Pomoci priznaku InUseFlag testuj dokonceni cmp byte ptr es:[si+8],0 ;odeslal uz packet ? jne neodeslal mov dx,usedsocket ;Zavri socket mov bx,1 int 7ah konec: ;konci mov ax,4c00h int 21h END