summary refs log tree commit diff stats
path: root/lib/windows/nb30.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/windows/nb30.nim')
-rwxr-xr-xlib/windows/nb30.nim230
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