#include #include #include #include #include #include #include "pktdrvr.h" #define MAX_DUZ_OKVIR 1518 #define DA 1 #define NE 0 extern int Derr; int far spremnik_pun; /* zastavica koja ima vrijednost 1 ako je prijemni spremnik pun. Kada ispisemo primljenu poruku, zastavicu postavljamo na 0 */ unsigned far segment; unsigned far pomak; void far prijem() { static char far prijemni_spremnik[MAX_DUZ_OKVIR]; if(_AX==0) { if(!spremnik_pun) { segment=FP_SEG(prijemni_spremnik); pomak=FP_OFF(prijemni_spremnik); } else { segment=0; pomak=0; } asm pop di _DI=pomak; _ES=segment; asm push di /* pop i push su ovdje potrebni jer C compiler uzima stare vrijednosti sa stoga za registre BP,SI,DI Ovdje treba pripaziti i na to da se registru ES zadnjem promijeni vrijednost, jer se on mijenja pri dodijeljivanju _DI=pomak */ } else { spremnik_pun=DA; /* svi daljnji paketi se odbacuju dok se ovaj ne obradi */ } } /* tijela ostalih funkcija */ void main(void) { /* ... */ }