diff options
Diffstat (limited to 'lib/windows/nb30.nim')
-rwxr-xr-x | lib/windows/nb30.nim | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/lib/windows/nb30.nim b/lib/windows/nb30.nim new file mode 100755 index 000000000..8c61bbaf7 --- /dev/null +++ b/lib/windows/nb30.nim @@ -0,0 +1,230 @@ +# +# +# Nimrod's Runtime Library +# (c) Copyright 2006 Andreas Rumpf +# +# See the file "copying.txt", included in this +# distribution, for details about the copyright. +# +# NetBIOS 3.0 interface unit + +# This unit contains the definitions for portable NetBIOS 3.0 support. + +import # Data structure templates + Windows + +const + NCBNAMSZ* = 16 # absolute length of a net name + MAX_LANA* = 254 # lana's in range 0 to MAX_LANA inclusive + +type # Network Control Block + PNCB* = ptr TNCB + TNCBPostProc* = proc (P: PNCB) + TNCB* = record # Structure returned to the NCB command NCBASTAT is ADAPTER_STATUS followed + # by an array of NAME_BUFFER structures. + ncb_command*: Char # command code + ncb_retcode*: Char # return code + ncb_lsn*: Char # local session number + ncb_num*: Char # number of our network name + ncb_buffer*: cstring # address of message buffer + ncb_length*: int16 # size of message buffer + ncb_callname*: array[0..NCBNAMSZ - 1, char] # blank-padded name of remote + ncb_name*: array[0..NCBNAMSZ - 1, char] # our blank-padded netname + ncb_rto*: Char # rcv timeout/retry count + ncb_sto*: Char # send timeout/sys timeout + ncb_post*: TNCBPostProc # POST routine address + ncb_lana_num*: Char # lana (adapter) number + ncb_cmd_cplt*: Char # 0xff => commmand pending + ncb_reserve*: array[0..9, Char] # reserved, used by BIOS + ncb_event*: THandle # HANDLE to Win32 event which + # will be set to the signalled + # state when an ASYNCH command + # completes + + PAdapterStatus* = ptr TAdapterStatus + TAdapterStatus* = record + adapter_address*: array[0..5, Char] + rev_major*: Char + reserved0*: Char + adapter_type*: Char + rev_minor*: Char + duration*: int16 + frmr_recv*: int16 + frmr_xmit*: int16 + iframe_recv_err*: int16 + xmit_aborts*: int16 + xmit_success*: DWORD + recv_success*: DWORD + iframe_xmit_err*: int16 + recv_buff_unavail*: int16 + t1_timeouts*: int16 + ti_timeouts*: int16 + reserved1*: DWORD + free_ncbs*: int16 + max_cfg_ncbs*: int16 + max_ncbs*: int16 + xmit_buf_unavail*: int16 + max_dgram_size*: int16 + pending_sess*: int16 + max_cfg_sess*: int16 + max_sess*: int16 + max_sess_pkt_size*: int16 + name_count*: int16 + + PNameBuffer* = ptr TNameBuffer + TNameBuffer* = record + name*: array[0..NCBNAMSZ - 1, Char] + name_num*: Char + name_flags*: Char + + +const # values for name_flags bits. + NAME_FLAGS_MASK* = 0x00000087 + GROUP_NAME* = 0x00000080 + UNIQUE_NAME* = 0x00000000 + REGISTERING* = 0x00000000 + REGISTERED* = 0x00000004 + DEREGISTERED* = 0x00000005 + DUPLICATE* = 0x00000006 + DUPLICATE_DEREG* = 0x00000007 + +type # 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. + PSessionHeader* = ptr TSessionHeader + TSessionHeader* = record + sess_name*: Char + num_sess*: Char + rcv_dg_outstanding*: Char + rcv_any_outstanding*: Char + + PSessionBuffer* = ptr TSessionBuffer + TSessionBuffer* = record + lsn*: Char + state*: Char + local_name*: array[0..NCBNAMSZ - 1, Char] + remote_name*: array[0..NCBNAMSZ - 1, Char] + rcvs_outstanding*: Char + sends_outstanding*: Char + + +const # Values for state + LISTEN_OUTSTANDING* = 0x00000001 + CALL_PENDING* = 0x00000002 + SESSION_ESTABLISHED* = 0x00000003 + HANGUP_PENDING* = 0x00000004 + HANGUP_COMPLETE* = 0x00000005 + SESSION_ABORTED* = 0x00000006 + +type # 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. + PLanaEnum* = ptr TLanaEnum + TLanaEnum* = record # Structure returned to the NCB command NCBFINDNAME is FIND_NAME_HEADER followed + # by an array of FIND_NAME_BUFFER structures. + len*: Char # Number of valid entries in lana[] + lana*: array[0..MAX_LANA, Char] + + PFindNameHeader* = ptr TFindNameHeader + TFindNameHeader* = record + node_count*: int16 + reserved*: Char + unique_group*: Char + + PFindNameBuffer* = ptr TFindNameBuffer + TFindNameBuffer* = record # Structure provided with NCBACTION. The purpose of NCBACTION is to provide + # transport specific extensions to netbios. + len*: Char + access_control*: Char + frame_control*: Char + destination_addr*: array[0..5, Char] + source_addr*: array[0..5, Char] + routing_info*: array[0..17, Char] + + PActionHeader* = ptr TActionHeader + TActionHeader* = record + transport_id*: int32 + action_code*: int16 + reserved*: int16 + + +const # Values for transport_id + ALL_TRANSPORTS* = "M\0\0\0" + MS_NBF* = "MNBF" # Special values and constants + +const # NCB Command codes + NCBCALL* = 0x00000010 # NCB CALL + NCBLISTEN* = 0x00000011 # NCB LISTEN + NCBHANGUP* = 0x00000012 # NCB HANG UP + NCBSEND* = 0x00000014 # NCB SEND + NCBRECV* = 0x00000015 # NCB RECEIVE + NCBRECVANY* = 0x00000016 # NCB RECEIVE ANY + NCBCHAINSEND* = 0x00000017 # NCB CHAIN SEND + NCBDGSEND* = 0x00000020 # NCB SEND DATAGRAM + NCBDGRECV* = 0x00000021 # NCB RECEIVE DATAGRAM + NCBDGSENDBC* = 0x00000022 # NCB SEND BROADCAST DATAGRAM + NCBDGRECVBC* = 0x00000023 # NCB RECEIVE BROADCAST DATAGRAM + NCBADDNAME* = 0x00000030 # NCB ADD NAME + NCBDELNAME* = 0x00000031 # NCB DELETE NAME + NCBRESET* = 0x00000032 # NCB RESET + NCBASTAT* = 0x00000033 # NCB ADAPTER STATUS + NCBSSTAT* = 0x00000034 # NCB SESSION STATUS + NCBCANCEL* = 0x00000035 # NCB CANCEL + NCBADDGRNAME* = 0x00000036 # NCB ADD GROUP NAME + NCBENUM* = 0x00000037 # NCB ENUMERATE LANA NUMBERS + NCBUNLINK* = 0x00000070 # NCB UNLINK + NCBSENDNA* = 0x00000071 # NCB SEND NO ACK + NCBCHAINSENDNA* = 0x00000072 # NCB CHAIN SEND NO ACK + NCBLANSTALERT* = 0x00000073 # NCB LAN STATUS ALERT + NCBACTION* = 0x00000077 # NCB ACTION + NCBFINDNAME* = 0x00000078 # NCB FIND NAME + NCBTRACE* = 0x00000079 # NCB TRACE + ASYNCH* = 0x00000080 # high bit set = asynchronous + # NCB Return codes + NRC_GOODRET* = 0x00000000 # good return + # also returned when ASYNCH request accepted + NRC_BUFLEN* = 0x00000001 # illegal buffer length + NRC_ILLCMD* = 0x00000003 # illegal command + NRC_CMDTMO* = 0x00000005 # command timed out + NRC_INCOMP* = 0x00000006 # message incomplete, issue another command + NRC_BADDR* = 0x00000007 # illegal buffer address + NRC_SNUMOUT* = 0x00000008 # session number out of range + NRC_NORES* = 0x00000009 # no resource available + NRC_SCLOSED* = 0x0000000A # session closed + NRC_CMDCAN* = 0x0000000B # command cancelled + NRC_DUPNAME* = 0x0000000D # duplicate name + NRC_NAMTFUL* = 0x0000000E # name table full + NRC_ACTSES* = 0x0000000F # no deletions, name has active sessions + NRC_LOCTFUL* = 0x00000011 # local session table full + NRC_REMTFUL* = 0x00000012 # remote session table full + NRC_ILLNN* = 0x00000013 # illegal name number + NRC_NOCALL* = 0x00000014 # no callname + NRC_NOWILD* = 0x00000015 # cannot put * in NCB_NAME + NRC_INUSE* = 0x00000016 # name in use on remote adapter + NRC_NAMERR* = 0x00000017 # name deleted + NRC_SABORT* = 0x00000018 # session ended abnormally + NRC_NAMCONF* = 0x00000019 # name conflict detected + NRC_IFBUSY* = 0x00000021 # interface busy, IRET before retrying + NRC_TOOMANY* = 0x00000022 # too many commands outstanding, retry later + NRC_BRIDGE* = 0x00000023 # NCB_lana_num field invalid + NRC_CANOCCR* = 0x00000024 # command completed while cancel occurring + NRC_CANCEL* = 0x00000026 # command not valid to cancel + NRC_DUPENV* = 0x00000030 # name defined by anther local process + NRC_ENVNOTDEF* = 0x00000034 # environment undefined. RESET required + NRC_OSRESNOTAV* = 0x00000035 # required OS resources exhausted + NRC_MAXAPPS* = 0x00000036 # max number of applications exceeded + NRC_NOSAPS* = 0x00000037 # no saps available for netbios + NRC_NORESOURCES* = 0x00000038 # requested resources are not available + NRC_INVADDRESS* = 0x00000039 # invalid ncb address or length > segment + NRC_INVDDID* = 0x0000003B # invalid NCB DDID + NRC_LOCKFAIL* = 0x0000003C # lock of user area failed + NRC_OPENERR* = 0x0000003F # NETBIOS not loaded + NRC_SYSTEM* = 0x00000040 # system error + NRC_PENDING* = 0x000000FF # asynchronous command is not yet finished + # main user entry point for NetBIOS 3.0 + # Usage: Result = Netbios( pncb ); + +proc Netbios*(P: PNCB): Char{.stdcall, dynlib: "netapi32.dll", + importc: "Netbios".} +# implementation |