// Команды для передачи датаграмм
#define NB_WSendDatagram 0x20 #define NB_SendDatagram 0xa0 #define NB_WSendBroadcastDatagram 0x22 #define NB_SendBroadcastDatagram 0xa2
// Команды для приема датаграмм
#define NB_WReceiveDatagram 0x21 #define NB_ReceiveDatagram 0xa1 #define NB_WReceiveBroadcastDatagram 0x23 #define NB_ReceiveBroadcastDatagram 0xa3
// Команды для работы с каналами
#define NB_WCall 0x10 #define NB_Call 0x90 #define NB_WListen 0x11 #define NB_Listen 0x91 #define NB_WHangUp 0x12 #define NB_HangUp 0x92
// Команды для передачи данных по каналу
#define NB_WSend 0x14 #define NB_Send 0x94 #define NB_WSendNoAck 0x71 #define NB_SendNoAck 0xf1
#define NB_WChainSend 0x17 #define NB_ChainSend 0x97 #define NB_WChainSendNoAck 0x72 #define NB_ChainSendNoAck 0xf2 // Команды для приема данных по каналу
#define NB_WReceive 0x15 #define NB_Receive 0x95 #define NB_WReceiveAny 0x16 #define NB_ReceiveAny 0x96
// Прочие команды
#define NB_WResetAdapter 0x32 #define NB_WCancel 0x35 #define NB_WSessionStatus 0x34 #define NB_SessionStatus 0xb4
// Класс NCB для работы с командами NETBIOS
class NCB {
// Стандартный блок NCB в формате NETBIOS
struct _NCB { unsigned char Cmd; unsigned char CCode; unsigned char LocalSessionNumber; unsigned char NetworkNameNumber; void far *Buffer; unsigned Size; char CallName[16]; char OurName[16]; unsigned char ReceiveTimeout; unsigned char SendTimeout; void interrupt (*PostRoutine)(void); unsigned char AdapterNumber; unsigned char FinalCCode; unsigned char Reserved[14]; } ncb; struct SREGS sregs; union REGS regs; unsigned errno;
// Функция для вызова NETBIOS
void NetBios(void) { sregs.es = FP_SEG(&ncb); regs.x.bx = FP_OFF(&ncb); int86x(0x5c, ®s, ®s, &sregs); }
public:
// Конструктор, расписывает ncb нулями
NCB() { memset(&ncb, 0, sizeof(ncb)); errno = 0; }
// Функция возвращает код ошибки
int Error(void) {return errno;}
// Функция для добавления имени
void WAddName(char *name);
// Функция для удаления имени