INTERFACEThis module contains the definitions for portable NetBIOS 3.0 support.NB30 ;
IMPORT Ctypes; FROM WinDef IMPORT UCHAR, PUCHAR, WORD, DWORD, ULONG, USHORT; FROM WinNT IMPORT HANDLE;*************************************************************** * * * Data structure templates * * * ***************************************************************
CONST NCBNAMSZ = 16; (* absolute length of a net name *) MAX_LANA = 254; (* lana's in range 0 to MAX_LANA *)
* Network Control Block
TYPE PNCB = UNTRACED REF NCB; NCB = RECORD ncb_command : UCHAR; (* command code *) ncb_retcode : UCHAR; (* return code *) ncb_lsn : UCHAR; (* local session number *) ncb_num : UCHAR; (* number of our network name *) ncb_buffer : PUCHAR; (* address of message buffer *) ncb_length : WORD; (* size of message buffer *) ncb_callname : NCB_name; (* blank-padded name of remote *) ncb_name : NCB_name; (* our blank-padded netname *) ncb_rto : UCHAR; (* rcv timeout/retry count *) ncb_sto : UCHAR; (* send timeout/sys timeout *) ncb_post : NCB_post; (* POST routine address *) ncb_lana_num : UCHAR; (* lana (adapter) number *) ncb_cmd_cplt : UCHAR; (* 0xff => commmand pending *) ncb_reserve : ARRAY [0 .. 9] OF UCHAR; (* reserved, used by BIOS *) ncb_event : HANDLE; (* HANDLE to Win32 event which *) (* will be set to the signalled *) (* state when an ASYNCH command *) (* completes *) END; NCB_name = ARRAY [0 .. NCBNAMSZ - 1] OF UCHAR; NCB_post = <*CALLBACK*> PROCEDURE (arg: PNCB); (* * Structure returned to the NCB command NCBASTAT is ADAPTER_STATUS followed * by an array of NAME_BUFFER structures. *) PADAPTER_STATUS = UNTRACED REF ADAPTER_STATUS; ADAPTER_STATUS = RECORD adapter_address : ARRAY [0 .. 6 - 1] OF UCHAR; rev_major : UCHAR; reserved0 : UCHAR; adapter_type : UCHAR; rev_minor : UCHAR; duration : WORD; frmr_recv : WORD; frmr_xmit : WORD; iframe_recv_err : WORD; xmit_aborts : WORD; xmit_success : DWORD; recv_success : DWORD; iframe_xmit_err : WORD; recv_buff_unavail: WORD; t1_timeouts : WORD; ti_timeouts : WORD; reserved1 : DWORD; 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 : WORD; END; PNAME_BUFFER = UNTRACED REF NAME_BUFFER; NAME_BUFFER = RECORD name : NCB_name; name_num : UCHAR; name_flags: UCHAR; END;values for name_flags bits.
CONST NAME_FLAGS_MASK = 16_87; GROUP_NAME = 16_80; UNIQUE_NAME = 16_00; REGISTERING = 16_00; REGISTERED = 16_04; DEREGISTERED = 16_05; DUPLICATE = 16_06; DUPLICATE_DEREG = 16_07;
* Structure returned to the NCB command NCBSSTAT is SESSION_HEADER followed * by an array of SESSION_BUFFER structures. If the NCB_NAME starts with an * asterisk then an array of these structures is returned containing the * status for all names.
TYPE PSESSION_HEADER = UNTRACED REF SESSION_HEADER; SESSION_HEADER = RECORD sess_name : UCHAR; num_sess : UCHAR; rcv_dg_outstanding : UCHAR; rcv_any_outstanding : UCHAR; END; PSESSION_BUFFER = UNTRACED REF SESSION_BUFFER; SESSION_BUFFER = RECORD lsn : UCHAR; state : UCHAR; local_name : NCB_name; remote_name : NCB_name; rcvs_outstanding : UCHAR; sends_outstanding : UCHAR; END;Values for state
CONST LISTEN_OUTSTANDING = 16_01; CALL_PENDING = 16_02; SESSION_ESTABLISHED = 16_03; HANGUP_PENDING = 16_04; HANGUP_COMPLETE = 16_05; SESSION_ABORTED = 16_06;
* Structure returned to the NCB command NCBENUM. * * On a system containing lana's 0, 2 and 3, a structure with * length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.
TYPE PLANA_ENUM = UNTRACED REF LANA_ENUM; LANA_ENUM = RECORD length: UCHAR; (* Number of valid entries in lana[] *) lana: ARRAY [0 .. MAX_LANA] OF UCHAR; END; (* * Structure returned to the NCB command NCBFINDNAME is FIND_NAME_HEADER * followed by an array of FIND_NAME_BUFFER structures. *) PFIND_NAME_HEADER = UNTRACED REF FIND_NAME_HEADER; FIND_NAME_HEADER = RECORD node_count : WORD; reserved : UCHAR; unique_group: UCHAR; END; PFIND_NAME_BUFFER = UNTRACED REF FIND_NAME_BUFFER; FIND_NAME_BUFFER = RECORD length : UCHAR; access_control : UCHAR; frame_control : UCHAR; destination_addr: ARRAY [0 .. 6 - 1] OF UCHAR; source_addr : ARRAY [0 .. 6 - 1] OF UCHAR; routing_info : ARRAY [0 .. 18 - 1] OF UCHAR; END; (* * Structure provided with NCBACTION. The purpose of NCBACTION is to provide * transport specific extensions to netbios. *) PACTION_HEADER = UNTRACED REF ACTION_HEADER; ACTION_HEADER = RECORD transport_id: ULONG; action_code : USHORT; reserved : USHORT; END;Values for transport_id
VAR (* CONST *) ALL_TRANSPORTS: Ctypes.char_star; MS_NBF : Ctypes.char_star;*************************************************************** * * * Special values and constants * * * ***************************************************************
* NCB Command codes
CONST NCBCALL = 16_10; (* NCB CALL *) NCBLISTEN = 16_11; (* NCB LISTEN *) NCBHANGUP = 16_12; (* NCB HANG UP *) NCBSEND = 16_14; (* NCB SEND *) NCBRECV = 16_15; (* NCB RECEIVE *) NCBRECVANY = 16_16; (* NCB RECEIVE ANY *) NCBCHAINSEND = 16_17; (* NCB CHAIN SEND *) NCBDGSEND = 16_20; (* NCB SEND DATAGRAM *) NCBDGRECV = 16_21; (* NCB RECEIVE DATAGRAM *) NCBDGSENDBC = 16_22; (* NCB SEND BROADCAST DATAGRAM *) NCBDGRECVBC = 16_23; (* NCB RECEIVE BROADCAST DATAGRAM *) NCBADDNAME = 16_30; (* NCB ADD NAME *) NCBDELNAME = 16_31; (* NCB DELETE NAME *) NCBRESET = 16_32; (* NCB RESET *) NCBASTAT = 16_33; (* NCB ADAPTER STATUS *) NCBSSTAT = 16_34; (* NCB SESSION STATUS *) NCBCANCEL = 16_35; (* NCB CANCEL *) NCBADDGRNAME = 16_36; (* NCB ADD GROUP NAME *) NCBENUM = 16_37; (* NCB ENUMERATE LANA NUMBERS *) NCBUNLINK = 16_70; (* NCB UNLINK *) NCBSENDNA = 16_71; (* NCB SEND NO ACK *) NCBCHAINSENDNA = 16_72; (* NCB CHAIN SEND NO ACK *) NCBLANSTALERT = 16_73; (* NCB LAN STATUS ALERT *) NCBACTION = 16_77; (* NCB ACTION *) NCBFINDNAME = 16_78; (* NCB FIND NAME *) NCBTRACE = 16_79; (* NCB TRACE *) ASYNCH = 16_80; (* high bit set == asynchronous *)
* NCB Return codes
CONST NRC_GOODRET = 16_00; (* good return *) (* also returned when ASYNCH request accepted *) NRC_BUFLEN = 16_01; (* illegal buffer length *) NRC_ILLCMD = 16_03; (* illegal command *) NRC_CMDTMO = 16_05; (* command timed out *) NRC_INCOMP = 16_06; (* message incomplete, issue another command *) NRC_BADDR = 16_07; (* illegal buffer address *) NRC_SNUMOUT = 16_08; (* session number out of range *) NRC_NORES = 16_09; (* no resource available *) NRC_SCLOSED = 16_0a; (* session closed *) NRC_CMDCAN = 16_0b; (* command cancelled *) NRC_DUPNAME = 16_0d; (* duplicate name *) NRC_NAMTFUL = 16_0e; (* name table full *) NRC_ACTSES = 16_0f; (* no deletions, name has active sessions *) NRC_LOCTFUL = 16_11; (* local session table full *) NRC_REMTFUL = 16_12; (* remote session table full *) NRC_ILLNN = 16_13; (* illegal name number *) NRC_NOCALL = 16_14; (* no callname *) NRC_NOWILD = 16_15; (* cannot put * in NCB_NAME *) NRC_INUSE = 16_16; (* name in use on remote adapter *) NRC_NAMERR = 16_17; (* name deleted *) NRC_SABORT = 16_18; (* session ended abnormally *) NRC_NAMCONF = 16_19; (* name conflict detected *) NRC_IFBUSY = 16_21; (* interface busy, IRET before retrying *) NRC_TOOMANY = 16_22; (* too many commands outstanding, retry later *) NRC_BRIDGE = 16_23; (* ncb_lana_num field invalid *) NRC_CANOCCR = 16_24; (* command completed while cancel occurring *) NRC_CANCEL = 16_26; (* command not valid to cancel *) NRC_DUPENV = 16_30; (* name defined by anther local process *) NRC_ENVNOTDEF = 16_34; (* environment undefined. RESET required *) NRC_OSRESNOTAV = 16_35; (* required OS resources exhausted *) NRC_MAXAPPS = 16_36; (* max number of applications exceeded *) NRC_NOSAPS = 16_37; (* no saps available for netbios *) NRC_NORESOURCES = 16_38; (* requested resources are not available *) NRC_INVADDRESS = 16_39; (* invalid ncb address or length > segment *) NRC_INVDDID = 16_3B; (* invalid NCB DDID *) NRC_LOCKFAIL = 16_3C; (* lock of user area failed *) NRC_OPENERR = 16_3f; (* NETBIOS not loaded *) NRC_SYSTEM = 16_40; (* system error *) NRC_PENDING = 16_ff; (* asynchronous command is not yet finished *)*************************************************************** * * * main user entry point for NetBIOS 3.0 * * * * Usage: result = Netbios( pncb ); * ***************************************************************
<*EXTERNAL Netbios:WINAPI*> PROCEDURE Netbios(pncb: PNCB): UCHAR; END NB30.