/*
 *  nb30.mh     Netbios function and associated types
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef NCB_INCLUDED
#define NCB_INCLUDED

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file;
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* Macro to define callback functions */
#define NCB_POST    void CALLBACK

/* Sizes */
#define NCBNAMSZ    16
#define MAX_LANA    254

/* Name flags */
#define NAME_FLAGS_MASK 0x87
#define GROUP_NAME      0x80
#define REGISTERING     0x00
#define REGISTERED      0x04
#define DEREGISTERED    0x05
#define DUPLICATE       0x06
#define DUPLICATE_DEREG 0x07

/* Session states */
#define LISTEN_OUTSTANDING  0x01
#define CALL_PENDING        0x02
#define SESSION_ESTABLISHED 0x03
#define HANGUP_PENDING      0x04
#define HANGUP_COMPLETE     0x05
#define SESSION_ABORTED     0x06

/* Transport providers */
#define ALL_TRANSPORTS  "M\0\0\0"
#define MS_NBF          "MNBF"

/* Network control block commands */
#define NCBCALL         0x10
#define NCBLISTEN       0x11
#define NCBHANGUP       0x12
#define NCBSEND         0x14
#define NCBRECV         0x15
#define NCBRECVANY      0x16
#define NCBCHAINSEND    0x17
#define NCBDGSEND       0x20
#define NCBDGRECV       0x21
#define NCBDGSENDBC     0x22
#define NCBDGRECVBC     0x23
#define NCBADDNAME      0x30
#define NCBDELNAME      0x31
#define NCBRESET        0x32
#define NCBASTAT        0x33
#define NCBSSTAT        0x34
#define NCBCANCEL       0x35
#define NCBADDGRNAME    0x36
#define NCBENUM         0x37
#define NCBUNLINK       0x70
#define NCBSENDNA       0x71
#define NCBCHAINSENDNA  0x72
#define NCBLANSTALERT   0x73
#define NCBACTION       0x77
#define NCBFINDNAME     0x78
#define NCBTRACE        0x79
#define ASYNCH          0x80

/* Network control block return codes */
#define NRC_GOODRET     0x00
#define NRC_BUFLEN      0x01
#define NRC_ILLCMD      0x03
#define NRC_CMDTMO      0x05
#define NRC_INCOMP      0x06
#define NRC_BADDR       0x07
#define NRC_SNUMOUT     0x08
#define NRC_NORES       0x09
#define NRC_SCLOSED     0x0A
#define NRC_CMDCAN      0x0B
#define NRC_DUPNAME     0x0D
#define NRC_NAMTFUL     0x0E
#define NRC_ACTSES      0x0F
#define NRC_LOCTFUL     0x11
#define NRC_REMTFUL     0x12
#define NRC_ILLNN       0x13
#define NRC_NOCALL      0x14
#define NRC_NOWILD      0x15
#define NRC_INUSE       0x16
#define NRC_NAMERR      0x17
#define NRC_SABORT      0x18
#define NRC_NAMCONF     0x19
#define NRC_IFBUSY      0x21
#define NRC_TOOMANY     0x22
#define NRC_BRIDGE      0x23
#define NRC_CANOCCR     0x24
#define NRC_CANCEL      0x26
#define NRC_DUPENV      0x30
#define NRC_ENVNOTDEF   0x34
#define NRC_OSRESNOTAV  0x35
#define NRC_MAXAPPS     0x36
#define NRC_NOSAPS      0x37
#define NRC_NORESOURCES 0x38
#define NRC_INVADDRESS  0x39
#define NRC_INVDDID     0x3B
#define NRC_LOCKFAIL    0x3C
#define NRC_OPENERR     0x3F
#define NRC_SYSTEM      0x40
#define NRC_PENDING     0xFF

/* Network control block */
typedef struct _NCB {
    UCHAR   ncb_command;
    UCHAR   ncb_retcode;
    UCHAR   ncb_lsn;
    UCHAR   ncb_num;
    PUCHAR  ncb_buffer;
    WORD    ncb_length;
    UCHAR   ncb_callname[NCBNAMSZ];
    UCHAR   ncb_name[NCBNAMSZ];
    UCHAR   ncb_rto;
    UCHAR   ncb_sto;
    void    (CALLBACK *ncb_post)( struct _NCB * );
    UCHAR   ncb_lana_num;
    UCHAR   ncb_cmd_cplt;
    UCHAR   ncb_reserve[10];
    HANDLE  ncb_event;
} NCB;
typedef NCB *PNCB;

/* Network adapter status */
typedef struct _ADAPTER_STATUS {
    UCHAR   adapter_address[6];
    UCHAR   rev_major;
    UCHAR   reserved0;
    UCHAR   adapter_type;
    UCHAR   rev_minor;
    WORD    duration;
    WORD    frmr_recv;
    WORD    frmr_xmit;
    WORD    iframe_recv_err;
    WORD    xmit_aborts;
    DWORD   xmit_success;
    DWORD   recv_success;
    WORD    iframe_xmit_err;
    WORD    recv_buff_unavail;
    WORD    t1_timeouts;
    WORD    ti_timeouts;
    DWORD   reserved1;
    WORD    free_ncbs;
    WORD    max_cfg_ncbs;
    WORD    max_ncbs;
    WORD    xmit_buf_unavail;
    WORD    max_dgram_size;
    WORD    pending_sess;
    WORD    max_cfg_sess;
    WORD    max_sess;
    WORD    max_sess_pkt_size;
    WORD    name_count;
} ADAPTER_STATUS;
typedef ADAPTER_STATUS  *PADAPTER_STATUS;

/* Local network name buffer */
typedef struct _NAME_BUFFER {
    UCHAR   name[NCBNAMSZ];
    UCHAR   name_num;
    UCHAR   name_flags;
} NAME_BUFFER;
typedef NAME_BUFFER *PNAME_BUFFER;

/* Network session header */
typedef struct _SESSION_HEADER {
    UCHAR   sess_name;
    UCHAR   num_sess;
    UCHAR   rcv_dg_outstanding;
    UCHAR   rcv_any_outstanding;
} SESSION_HEADER;
typedef SESSION_HEADER  *PSESSION_HEADER;

/* Local network session buffer */
typedef struct _SESSION_BUFFER {
    UCHAR   lsn;
    UCHAR   state;
    UCHAR   local_name[NCBNAMSZ];
    UCHAR   remote_name[NCBNAMSZ];
    UCHAR   rcvs_outstanding;
    UCHAR   sends_outstanding;
} SESSION_BUFFER;
typedef SESSION_BUFFER  *PSESSION_BUFFER;

/* LAN adapter numbers */
typedef struct _LANA_ENUM {
    UCHAR   length;
    UCHAR   lana[MAX_LANA + 1];
} LANA_ENUM;
typedef LANA_ENUM   *PLANA_ENUM;

/* NCBFINDNAME header */
typedef struct _FIND_NAME_HEADER {
    WORD    node_count;
    UCHAR   reserved;
    UCHAR   unique_group;
} FIND_NAME_HEADER;
typedef FIND_NAME_HEADER    *PFIND_NAME_HEADER;

/* NCBFINDNAME buffer */
typedef struct _FIND_NAME_BUFFER {
    UCHAR   length;
    UCHAR   access_control;
    UCHAR   frame_control;
    UCHAR   destination_addr[6];
    UCHAR   source_addr[6];
    UCHAR   routing_info[18];
} FIND_NAME_BUFFER;
typedef FIND_NAME_BUFFER    *PFIND_NAME_BUFFER;

/* NCBACTION header */
typedef struct _ACTION_HEADER {
    ULONG   transport_id;
    USHORT  action_code;
    USHORT  reserved;
} ACTION_HEADER;
typedef ACTION_HEADER   *PACTION_HEADER;

/* Functions in NETAPI32.DLL */
UCHAR APIENTRY  Netbios( PNCB );

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* NCB_INCLUDED */
