home *** CD-ROM | disk | FTP | other *** search
- /* NBRCV.C - sample program - receives NetBIOS broadcast. - */
- /* Paul McGinnis - AST Research, Data Comm Support - Dept. 430 */
- /* August 1988. - comments added 9/26/88 */
- /* */
- /* General calling sequence for NetBIOS calls: */
- /* 1. Set up NCB (Network Control Block) */
- /* 2. Make ES:BX point to NCB structure */
- /* 3. Load AX with 100h */
- /* 4. Generate an INT 5Ch */
- /* */
- /* NetBIOS commands and definitions in NETBIOS.H */
- /* */
- /* Compilation information: */
- /* Compiler: Borland Turbo C v1.5 */
- /* Memory model: Small */
- /* Floating point support: none */
-
-
- #include <dos.h>
- #include <stdio.h>
- #include <netbios.h>
- #include <stdlib.h>
- #include <string.h>
-
-
- main()
- {
- NCB far * rcv_block;
- char far * rcv_message;
- char far * session_name;
- unsigned char ret_code, net_num, iflag;
- rcv_block = (NCB far *) malloc(sizeof(NCB));
- rcv_message = (char far *) malloc(80);
- session_name = (char far *) malloc(16);
- _AH = 0;
- geninterrupt(0x2a); /* Check to see if NetBIOS is loaded */
- iflag = _AH;
- if (!iflag)
- {
- puts(" *** ERROR - NetBIOS not installed. ***");
- return;
- }
- printf("Enter session name: ");
- gets(session_name);
- puts("generating network name...");
- rcv_block -> NCB_COMMAND = ADD_NAME_WAIT; /* Use default time-out values */
- rcv_block -> NCB_LANA_NUM = 0;
- rcv_block -> NCB_STO = 0;
- rcv_block -> NCB_RTO = 0;
- strncpy(rcv_block -> NCB_NAME, session_name, 16); /* Copy name to NCB */
- strncpy(rcv_block -> NCB_CALLNAME, "*", 16); /* Check all names on net */
- _ES = FP_SEG(rcv_block);
- _BX = FP_OFF(rcv_block);
- _AX = 0x100;
- geninterrupt(0x5c);
- ret_code = _AL;
- net_num = rcv_block -> NCB_NUM;
- if (ret_code)
- {
- printf("Bad return code = %02Xh\n", ret_code);
- return;
- }
- printf("Session established. Name number = %02Xh\n", net_num);
- puts("Waiting for broadcast message...");
- rcv_block -> NCB_RTO = 0;
- rcv_block -> NCB_BUFFER_OFFSET = FP_OFF(rcv_message);
- rcv_block -> NCB_BUFFER_SEGMENT = FP_SEG(rcv_message);
- rcv_block -> NCB_LENGTH = 80;
- rcv_block -> NCB_COMMAND = RECEIVE_BCST_DATAGRAM_WAIT; /* Wait until rcvd. */
- _ES = FP_SEG(rcv_block);
- _BX = FP_OFF(rcv_block);
- _AX = 0x100;
- geninterrupt(0x5c);
- ret_code = _AL;
- pokeb(FP_SEG(rcv_message), FP_OFF(rcv_message) + rcv_block -> NCB_LENGTH, 0);
- if (ret_code)
- printf("Error number = %02Xh\n", ret_code);
- else
- {
- printf("%c*** %Fs\n", 7, rcv_message);
- printf("From: %Fs\n", rcv_block -> NCB_CALLNAME);
- }
- printf("Releasing session >>>%Fs<<<, number %02Xh\n",
- rcv_block -> NCB_NAME, net_num);
- rcv_block -> NCB_NUM = net_num;
- rcv_block -> NCB_COMMAND = DELETE_NAME_WAIT; /* Schedule name for removal */
- _ES = FP_SEG(rcv_block);
- _BX = FP_OFF(rcv_block);
- _AX = 0x100;
- geninterrupt(0x5c);
- ret_code = _AL;
- if (ret_code)
- printf("Error number = %02Xh.\n", ret_code);
- else
- puts("Completed normally.");
- }