home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_01_07
/
1n07048a
< prev
next >
Wrap
Text File
|
1990-11-07
|
5KB
|
187 lines
/*************************************************
* NBLIBC.C -- NETBIOS library routines
*
* Copyright 1990 Tom Jensen
*************************************************/
#include <stddef.h>
#include <string.h>
#include <dos.h>
#include "netbios.h"
/************************************************
* NbNcbInit -- Initialize Network Control Block.
************************************************/
void NbNcbInit (struct NcbData *ncb, unsigned char cmd,
char *lnam, char *fnam)
{
memset (ncb, (char)0, sizeof (struct NcbData));
ncb->Command = cmd;
NbExpandName (ncb->Name, lnam);
NbExpandName (ncb->CallName, fnam);
}
/*****************************************************
* NbExpandName -- Copy a name with trailing spaces to
* a buffer.
*****************************************************/
void NbExpandName (char *buffer, char *name)
{
int i;
/* Insure name pointer is valid */
if (name == NULL)
name = "";
strncpy (buffer, name, 16);
if ((i = strlen (name)) < 16)
memset (&buffer[i], ' ', 16 - i);
}
/****************************************
* NbAddName -- Add a local network name.
****************************************/
unsigned NbAddName (struct NcbData *ncb, char *lnam)
{
NbNcbInit (ncb, NET_ADD_NAME, lnam, NULL);
return NBCALL (ncb);
}
/*******************************************
* NbDelName -- Delete a local network name.
*******************************************/
unsigned NbDelName (struct NcbData *ncb, char *lnam)
{
NbNcbInit (ncb, NET_DEL_NAME, lnam, NULL);
return (NBCALL (ncb));
}
/*****************************************************
* NbListen -- Allow a network session to be opened by
* another node. See NbOpenSession().
*
* *ses = session number if established
*****************************************************/
unsigned NbListen (struct NcbData *ncb, char *lnam,
char *fnam, unsigned char *ses)
{
unsigned reterr;
NbNcbInit (ncb, NET_LISTEN, lnam, fnam);
reterr = NBCALL (ncb);
if (reterr == NB_OK)
*ses = ncb->LSN;
return reterr;
}
/*********************************************************
* NbPostListen -- Allow a network session to be opened by
* another node with no-wait option.
*
* Note: session number must be retrieved from NCB after
* completion.
*********************************************************/
unsigned NbPostListen (struct NcbData *ncb, char *lnam,
char *fnam)
{
NbNcbInit (ncb, NET_LISTEN | NET_NOWAIT, lnam, fnam);
SETPOSTADDR ((void far *)(&(ncb->Post.pfar)));
return (NBCALL (ncb));
}
/****************************************************
* NbOpenSession -- Open a network session with fnam.
* fnam must be listening.
*
* *ses = session number if established
****************************************************/
unsigned NbOpenSession (struct NcbData *ncb, char *lnam,
char *fnam, unsigned char *ses)
{
unsigned reterr;
NbNcbInit (ncb, NET_CALL, lnam, fnam);
reterr = NBCALL (ncb);
if (reterr == NB_OK)
*ses = ncb->LSN;
return reterr;
}
/*******************************************************
* NbCloseSession -- Close network session number "ses".
*******************************************************/
unsigned NbCloseSession (struct NcbData *ncb, char *lnam,
char *fnam, unsigned char ses)
{
NbNcbInit (ncb, NET_HANGUP, lnam, fnam);
ncb->LSN = ses;
return (NBCALL (ncb));
}
/***********************************************************
* NbCancel -- Cancel pending NCB command pointed to by ncb.
***********************************************************/
unsigned NbCancel (struct NcbData *ncb)
{
NbNcbInit (ncb, NET_CANCEL, NULL, NULL);
ncb->Buffer.pfar = (struct NcbData far *) ncb;
return (NBCALL (ncb));
}
/*********************************************************
* NbSessionStatus -- Get network session status for local
* name.
*********************************************************/
unsigned NbSessionStatus (struct NcbData *ncb, char *lnam,
char *fnam, char *buffer, int bufsiz)
{
NbNcbInit (ncb, NET_SES_STAT, lnam, fnam);
ncb->Buffer.pfar = (struct NcbData far *) buffer;
ncb->Length = bufsiz;
return (NBCALL (ncb));
}
/*********************************************
* NbSendData -- Send a data to a remote node.
*********************************************/
unsigned NbSendData (struct NcbData *ncb, char *lnam,
char *fnam, char *buffer, int bufsiz, unsigned char ses)
{
NbNcbInit (ncb, NET_SEND, lnam, fnam);
ncb->LSN = ses;
ncb->Buffer.pfar = (char far *) buffer;
ncb->Length = bufsiz;
return (NBCALL (ncb));
}
/***************************************************
* NbReceiveData -- Receive data from a remote node.
***************************************************/
unsigned NbReceiveData (struct NcbData *ncb, char *lnam,
char *fnam, char *buffer, int bufsiz, unsigned char ses)
{
NbNcbInit (ncb, NET_RECV, lnam, fnam);
ncb->LSN = ses;
ncb->Buffer.pfar = (struct NcbData far *) buffer;
ncb->Length = bufsiz;
return (NBCALL (ncb));
}