#
#             Chronos Posix OS error codes
#              (c) Copyright 2023-Present
#         Status Research & Development GmbH
#
#              Licensed under either of
#  Apache License, version 2.0, (LICENSE-APACHEv2)
#              MIT license (LICENSE-MIT)
from std/os import osLastError, osErrorMsg, OSErrorCode, raiseOSError,
                   newOSError, `==`
export osLastError, osErrorMsg, OSError, OSErrorCode, raiseOSError, newOSError,
       `==`

when defined(netbsd):
  ## Source: https://github.com/NetBSD/src/blob/trunk/sys/sys/errno.h
  const
    EPERM* = OSErrorCode(1)
      # Operation not permitted
    ENOENT* = OSErrorCode(2)
      # No such file or directory
    ESRCH* = OSErrorCode(3)
      # No such process
    EINTR* = OSErrorCode(4)
      # Interrupted system call
    EIO* = OSErrorCode(5)
      # Input/output error
    ENXIO* = OSErrorCode(6)
      # Device not configured
    E2BIG* = OSErrorCode(7)
      # Argument list too long
    ENOEXEC* = OSErrorCode(8)
      # Exec format error
    EBADF* = OSErrorCode(9)
      # Bad file descriptor
    ECHILD* = OSErrorCode(10)
      # No child processes
    EDEADLK* = OSErrorCode(11)
      # Resource deadlock avoided
    ENOMEM* = OSErrorCode(12)
      # Cannot allocate memory
    EACCES* = OSErrorCode(13)
      # Permission denied
    EFAULT* = OSErrorCode(14)
      # Bad address
    ENOTBLK* = OSErrorCode(15)
      # Block device required
    EBUSY* = OSErrorCode(16)
      # Device busy
    EEXIST* = OSErrorCode(17)
      # File exists
    EXDEV* = OSErrorCode(18)
      # Cross-device link
    ENODEV* = OSErrorCode(19)
      # Operation not supported by device
    ENOTDIR* = OSErrorCode(20)
      # Not a directory
    EISDIR* = OSErrorCode(21)
      # Is a directory
    EINVAL* = OSErrorCode(22)
      # Invalid argument
    ENFILE* = OSErrorCode(23)
      # Too many open files in system
    EMFILE* = OSErrorCode(24)
      # Too many open files
    ENOTTY* = OSErrorCode(25)
      # Inappropriate ioctl for device
    ETXTBSY* = OSErrorCode(26)
      # Text file busy
    EFBIG* = OSErrorCode(27)
      # File too large
    ENOSPC* = OSErrorCode(28)
      # No space left on device
    ESPIPE* = OSErrorCode(29)
      # Illegal seek
    EROFS* = OSErrorCode(30)
      # Read-only file system
    EMLINK* = OSErrorCode(31)
      # Too many links
    EPIPE* = OSErrorCode(32)
      # Broken pipe
    EDOM* = OSErrorCode(33)
      # Numerical argument out of domain
    ERANGE* = OSErrorCode(34)
      # Result too large or too small
    EAGAIN* = OSErrorCode(35)
      # Resource temporarily unavailable
    EWOULDBLOCK* = EAGAIN
      # Operation would block
    EINPROGRESS* = OSErrorCode(36)
      # Operation now in progress
    EALREADY* = OSErrorCode(37)
      # Operation already in progress
    ENOTSOCK* = OSErrorCode(38)
      # Socket operation on non-socket
    EDESTADDRREQ* = OSErrorCode(39)
      # Destination address required
    EMSGSIZE* = OSErrorCode(40)
      # Message too long
    EPROTOTYPE* = OSErrorCode(41)
      # Protocol wrong type for socket
    ENOPROTOOPT* = OSErrorCode(42)
      # Protocol option not available
    EPROTONOSUPPORT* = OSErrorCode(43)
      # Protocol not supported
    ESOCKTNOSUPPORT* = OSErrorCode(44)
      # Socket type not supported
    EOPNOTSUPP* = OSErrorCode(45)
      # Operation not supported
    EPFNOSUPPORT* = OSErrorCode(46)
      # Protocol family not supported
    EAFNOSUPPORT* = OSErrorCode(47)
      # Address family not supported by protocol family
    EADDRINUSE* = OSErrorCode(48)
      # Address already in use
    EADDRNOTAVAIL* = OSErrorCode(49)
      # Can't assign requested address
    ENETDOWN* = OSErrorCode(50)
      # Network is down
    ENETUNREACH* = OSErrorCode(51)
      # Network is unreachable
    ENETRESET* = OSErrorCode(52)
      # Network dropped connection on reset
    ECONNABORTED* = OSErrorCode(53)
      # Software caused connection abort
    ECONNRESET* = OSErrorCode(54)
      # Connection reset by peer
    ENOBUFS* = OSErrorCode(55)
      # No buffer space available
    EISCONN* = OSErrorCode(56)
      # Socket is already connected
    ENOTCONN* = OSErrorCode(57)
      # Socket is not connected
    ESHUTDOWN* = OSErrorCode(58)
      # Can't send after socket shutdown
    ETOOMANYREFS* = OSErrorCode(59)
      # Too many references: can't splice
    ETIMEDOUT* = OSErrorCode(60)
      # Operation timed out
    ECONNREFUSED* = OSErrorCode(61)
      # Connection refused
    ELOOP* = OSErrorCode(62)
      # Too many levels of symbolic links
    ENAMETOOLONG* = OSErrorCode(63)
      # File name too long
    EHOSTDOWN* = OSErrorCode(64)
      # Host is down
    EHOSTUNREACH* = OSErrorCode(65)
      # No route to host
    ENOTEMPTY* = OSErrorCode(66)
      # Directory not empty
    EPROCLIM* = OSErrorCode(67)
      # Too many processes
    EUSERS* = OSErrorCode(68)
      # Too many users
    EDQUOT* = OSErrorCode(69)
      # Disc quota exceeded
    ESTALE* = OSErrorCode(70)
      # Stale NFS file handle
    EREMOTE* = OSErrorCode(71)
      # Too many levels of remote in path
    EBADRPC* = OSErrorCode(72)
      # RPC struct is bad
    ERPCMISMATCH* = OSErrorCode(73)
      # RPC version wrong
    EPROGUNAVAIL* = OSErrorCode(74)
      # RPC prog. not avail
    EPROGMISMATCH* = OSErrorCode(75)
      # Program version wrong
    EPROCUNAVAIL* = OSErrorCode(76)
      # Bad procedure for program
    ENOLCK* = OSErrorCode(77)
      # No locks available
    ENOSYS* = OSErrorCode(78)
      # Function not implemented
    EFTYPE* = OSErrorCode(79)
      # Inappropriate file type or format
    EAUTH* = OSErrorCode(80)
      # Authentication error
    ENEEDAUTH* = OSErrorCode(81)
      # Need authenticator
    EIDRM* = OSErrorCode(82)
      # Identifier removed
    ENOMSG* = OSErrorCode(83)
      # No message of desired type
    EOVERFLOW* = OSErrorCode(84)
      # Value too large to be stored in data type
    EILSEQ* = OSErrorCode(85)
      # Illegal byte sequence
    ENOTSUP* = OSErrorCode(86)
      # Not supported
    ECANCELED* = OSErrorCode(87)
      # Operation canceled
    EBADMSG* = OSErrorCode(88)
      # Bad or Corrupt message
    ENODATA* = OSErrorCode(89)
      # No message available
    ENOSR* = OSErrorCode(90)
      # No STREAM resources
    ENOSTR* = OSErrorCode(91)
      # Not a STREAM
    ETIME* = OSErrorCode(92)
      # STREAM ioctl timeout
    ENOATTR* = OSErrorCode(93)
      # Attribute not found
    EMULTIHOP* = OSErrorCode(94)
      # Multihop attempted
    ENOLINK* = OSErrorCode(95)
      # Link has been severed
    EPROTO* = OSErrorCode(96)
      # Protocol error
    EOWNERDEAD* = OSErrorCode(97)
      # Previous owner died
    ENOTRECOVERABLE* = OSErrorCode(98)
      # State not recoverable
    ELAST* = OSErrorCode(98)
      # Must equal largest errno

elif defined(openbsd):
  ## Source: https://github.com/openbsd/src/blob/master/sys/sys/errno.h
  const
    EPERM* = OSErrorCode(1)
      # Operation not permitted
    ENOENT* = OSErrorCode(2)
      # No such file or directory
    ESRCH* = OSErrorCode(3)
      # No such process
    EINTR* = OSErrorCode(4)
      # Interrupted system call
    EIO* = OSErrorCode(5)
      # Input/output error
    ENXIO* = OSErrorCode(6)
      # Device not configured
    E2BIG* = OSErrorCode(7)
      # Argument list too long
    ENOEXEC* = OSErrorCode(8)
      # Exec format error
    EBADF* = OSErrorCode(9)
      # Bad file descriptor
    ECHILD* = OSErrorCode(10)
      # No child processes
    EDEADLK* = OSErrorCode(11)
      # Resource deadlock avoided
    ENOMEM* = OSErrorCode(12)
      # Cannot allocate memory
    EACCES* = OSErrorCode(13)
      # Permission denied
    EFAULT* = OSErrorCode(14)
      # Bad address
    ENOTBLK* = OSErrorCode(15)
      # Block device required
    EBUSY* = OSErrorCode(16)
      # Device busy
    EEXIST* = OSErrorCode(17)
      # File exists
    EXDEV* = OSErrorCode(18)
      # Cross-device link
    ENODEV* = OSErrorCode(19)
      # Operation not supported by device
    ENOTDIR* = OSErrorCode(20)
      # Not a directory
    EISDIR* = OSErrorCode(21)
      # Is a directory
    EINVAL* = OSErrorCode(22)
      # Invalid argument
    ENFILE* = OSErrorCode(23)
      # Too many open files in system
    EMFILE* = OSErrorCode(24)
      # Too many open files
    ENOTTY* = OSErrorCode(25)
      # Inappropriate ioctl for device
    ETXTBSY* = OSErrorCode(26)
      # Text file busy
    EFBIG* = OSErrorCode(27)
      # File too large
    ENOSPC* = OSErrorCode(28)
      # No space left on device
    ESPIPE* = OSErrorCode(29)
      # Illegal seek
    EROFS* = OSErrorCode(30)
      # Read-only file system
    EMLINK* = OSErrorCode(31)
      # Too many links
    EPIPE* = OSErrorCode(32)
      # Broken pipe
    EDOM* = OSErrorCode(33)
      # Numerical argument out of domain
    ERANGE* = OSErrorCode(34)
      # Result too large
    EAGAIN* = OSErrorCode(35)
      # Resource temporarily unavailable
    EWOULDBLOCK* = EAGAIN
      # Operation would block
    EINPROGRESS* = OSErrorCode(36)
      # Operation now in progress
    EALREADY* = OSErrorCode(37)
      # Operation already in progress
    ENOTSOCK* = OSErrorCode(38)
      # Socket operation on non-socket
    EDESTADDRREQ* = OSErrorCode(39)
      # Destination address required
    EMSGSIZE* = OSErrorCode(40)
      # Message too long
    EPROTOTYPE* = OSErrorCode(41)
      # Protocol wrong type for socket
    ENOPROTOOPT* = OSErrorCode(42)
      # Protocol not available
    EPROTONOSUPPORT* = OSErrorCode(43)
      # Protocol not supported
    ESOCKTNOSUPPORT* = OSErrorCode(44)
      # Socket type not supported
    EOPNOTSUPP* = OSErrorCode(45)
      # Operation not supported
    EPFNOSUPPORT* = OSErrorCode(46)
      # Protocol family not supported
    EAFNOSUPPORT* = OSErrorCode(47)
      # Address family not supported by protocol family
    EADDRINUSE* = OSErrorCode(48)
      # Address already in use
    EADDRNOTAVAIL* = OSErrorCode(49)
      # Can't assign requested address
    ENETDOWN* = OSErrorCode(50)
      # Network is down
    ENETUNREACH* = OSErrorCode(51)
      # Network is unreachable
    ENETRESET* = OSErrorCode(52)
      # Network dropped connection on reset
    ECONNABORTED* = OSErrorCode(53)
      # Software caused connection abort
    ECONNRESET* = OSErrorCode(54)
      # Connection reset by peer
    ENOBUFS* = OSErrorCode(55)
      # No buffer space available
    EISCONN* = OSErrorCode(56)
      # Socket is already connected
    ENOTCONN* = OSErrorCode(57)
      # Socket is not connected
    ESHUTDOWN* = OSErrorCode(58)
      # Can't send after socket shutdown
    ETOOMANYREFS* = OSErrorCode(59)
      # Too many references: can't splice
    ETIMEDOUT* = OSErrorCode(60)
      # Operation timed out
    ECONNREFUSED* = OSErrorCode(61)
      # Connection refused
    ELOOP* = OSErrorCode(62)
      # Too many levels of symbolic links
    ENAMETOOLONG* = OSErrorCode(63)
      # File name too long
    EHOSTDOWN* = OSErrorCode(64)
      # Host is down
    EHOSTUNREACH* = OSErrorCode(65)
      # No route to host
    ENOTEMPTY* = OSErrorCode(66)
      # Directory not empty
    EPROCLIM* = OSErrorCode(67)
      # Too many processes
    EUSERS* = OSErrorCode(68)
      # Too many users
    EDQUOT* = OSErrorCode(69)
      # Disk quota exceeded
    ESTALE* = OSErrorCode(70)
      # Stale NFS file handle
    EREMOTE* = OSErrorCode(71)
      # Too many levels of remote in path
    EBADRPC* = OSErrorCode(72)
      # RPC struct is bad
    ERPCMISMATCH* = OSErrorCode(73)
      # RPC version wrong
    EPROGUNAVAIL* = OSErrorCode(74)
      # RPC program not available
    EPROGMISMATCH* = OSErrorCode(75)
      # Program version wrong
    EPROCUNAVAIL* = OSErrorCode(76)
      # Bad procedure for program
    ENOLCK* = OSErrorCode(77)
      # No locks available
    ENOSYS* = OSErrorCode(78)
      # Function not implemented
    EFTYPE* = OSErrorCode(79)
      # Inappropriate file type or format
    EAUTH* = OSErrorCode(80)
      # Authentication error
    ENEEDAUTH* = OSErrorCode(81)
      # Need authenticator
    EIPSEC* = OSErrorCode(82)
      # IPsec processing failure
    ENOATTR* = OSErrorCode(83)
      # Attribute not found
    EILSEQ* = OSErrorCode(84)
      # Illegal byte sequence
    ENOMEDIUM* = OSErrorCode(85)
      # No medium found
    EMEDIUMTYPE* = OSErrorCode(86)
      # Wrong medium type
    EOVERFLOW* = OSErrorCode(87)
      # Value too large to be stored in data type
    ECANCELED* = OSErrorCode(88)
      # Operation canceled
    EIDRM* = OSErrorCode(89)
      # Identifier removed
    ENOMSG* = OSErrorCode(90)
      # No message of desired type
    ENOTSUP* = OSErrorCode(91)
      # Not supported
    EBADMSG* = OSErrorCode(92)
      # Bad message
    ENOTRECOVERABLE* = OSErrorCode(93)
      # State not recoverable
    EOWNERDEAD* = OSErrorCode(94)
      # Previous owner died
    EPROTO* = OSErrorCode(95)
      # Protocol error
    ELAST* = OSErrorCode(95)
      # Must be equal largest errno

elif defined(freebsd):
  ## Source: https://github.com/freebsd/freebsd-src/blob/main/sys/sys/errno.h
  const
    EPERM* = OSErrorCode(1)
      # Operation not permitted
    ENOENT* = OSErrorCode(2)
      # No such file or directory
    ESRCH* = OSErrorCode(3)
      # No such process
    EINTR* = OSErrorCode(4)
      # Interrupted system call
    EIO* = OSErrorCode(5)
      # Input/output error
    ENXIO* = OSErrorCode(6)
      # Device not configured
    E2BIG* = OSErrorCode(7)
      # Argument list too long
    ENOEXEC* = OSErrorCode(8)
      # Exec format error
    EBADF* = OSErrorCode(9)
      # Bad file descriptor
    ECHILD* = OSErrorCode(10)
      # No child processes
    EDEADLK* = OSErrorCode(11)
      # Resource deadlock avoided
    ENOMEM* = OSErrorCode(12)
      # Cannot allocate memory
    EACCES* = OSErrorCode(13)
      # Permission denied
    EFAULT* = OSErrorCode(14)
      # Bad address
    ENOTBLK* = OSErrorCode(15)
      # Block device required
    EBUSY* = OSErrorCode(16)
      # Device busy
    EEXIST* = OSErrorCode(17)
      # File exists
    EXDEV* = OSErrorCode(18)
      # Cross-device link
    ENODEV* = OSErrorCode(19)
      # Operation not supported by device
    ENOTDIR* = OSErrorCode(20)
      # Not a directory
    EISDIR* = OSErrorCode(21)
      # Is a directory
    EINVAL* = OSErrorCode(22)
      # Invalid argument
    ENFILE* = OSErrorCode(23)
      # Too many open files in system
    EMFILE* = OSErrorCode(24)
      # Too many open files
    ENOTTY* = OSErrorCode(25)
      # Inappropriate ioctl for device
    ETXTBSY* = OSErrorCode(26)
      # Text file busy
    EFBIG* = OSErrorCode(27)
      # File too large
    ENOSPC* = OSErrorCode(28)
      # No space left on device
    ESPIPE* = OSErrorCode(29)
      # Illegal seek
    EROFS* = OSErrorCode(30)
      # Read-only filesystem
    EMLINK* = OSErrorCode(31)
      # Too many links
    EPIPE* = OSErrorCode(32)
      # Broken pipe
    EDOM* = OSErrorCode(33)
      # Numerical argument out of domain
    ERANGE* = OSErrorCode(34)
      # Result too large
    EAGAIN* = OSErrorCode(35)
      # Resource temporarily unavailable
    EWOULDBLOCK* = EAGAIN
      # Operation would block
    EINPROGRESS* = OSErrorCode(36)
      # Operation now in progress
    EALREADY* = OSErrorCode(37)
      # Operation already in progress
    ENOTSOCK* = OSErrorCode(38)
      # Socket operation on non-socket
    EDESTADDRREQ* = OSErrorCode(39)
      # Destination address required
    EMSGSIZE* = OSErrorCode(40)
      # Message too long
    EPROTOTYPE* = OSErrorCode(41)
      # Protocol wrong type for socket
    ENOPROTOOPT* = OSErrorCode(42)
      # Protocol not available
    EPROTONOSUPPORT* = OSErrorCode(43)
      # Protocol not supported
    ESOCKTNOSUPPORT* = OSErrorCode(44)
      # Socket type not supported
    EOPNOTSUPP* = OSErrorCode(45)
      # Operation not supported
    ENOTSUP* = EOPNOTSUPP
      # Operation not supported
    EPFNOSUPPORT* = OSErrorCode(46)
      # Protocol family not supported
    EAFNOSUPPORT* = OSErrorCode(47)
      # Address family not supported by protocol family
    EADDRINUSE* = OSErrorCode(48)
      # Address already in use
    EADDRNOTAVAIL* = OSErrorCode(49)
      # Can't assign requested address
    ENETDOWN* = OSErrorCode(50)
      # Network is down
    ENETUNREACH* = OSErrorCode(51)
      # Network is unreachable
    ENETRESET* = OSErrorCode(52)
      # Network dropped connection on reset
    ECONNABORTED* = OSErrorCode(53)
      # Software caused connection abort
    ECONNRESET* = OSErrorCode(54)
      # Connection reset by peer
    ENOBUFS* = OSErrorCode(55)
      # No buffer space available
    EISCONN* = OSErrorCode(56)
      # Socket is already connected
    ENOTCONN* = OSErrorCode(57)
      # Socket is not connected
    ESHUTDOWN* = OSErrorCode(58)
      # Can't send after socket shutdown
    ETOOMANYREFS* = OSErrorCode(59)
      # Too many references: can't splice
    ETIMEDOUT* = OSErrorCode(60)
      # Operation timed out
    ECONNREFUSED* = OSErrorCode(61)
      # Connection refused
    ELOOP* = OSErrorCode(62)
      # Too many levels of symbolic links
    ENAMETOOLONG* = OSErrorCode(63)
      # File name too long
    EHOSTDOWN* = OSErrorCode(64)
      # Host is down
    EHOSTUNREACH* = OSErrorCode(65)
      # No route to host
    ENOTEMPTY* = OSErrorCode(66)
      # Directory not empty
    EPROCLIM* = OSErrorCode(67)
      # Too many processes
    EUSERS* = OSErrorCode(68)
      # Too many users
    EDQUOT* = OSErrorCode(69)
      # Disc quota exceeded
    ESTALE* = OSErrorCode(70)
      # Stale NFS file handle
    EREMOTE* = OSErrorCode(71)
      # Too many levels of remote in path
    EBADRPC* = OSErrorCode(72)
      # RPC struct is bad
    ERPCMISMATCH* = OSErrorCode(73)
      # RPC version wrong
    EPROGUNAVAIL* = OSErrorCode(74)
      # RPC prog. not avail
    EPROGMISMATCH* = OSErrorCode(75)
      # Program version wrong
    EPROCUNAVAIL* = OSErrorCode(76)
      # Bad procedure for program
    ENOLCK* = OSErrorCode(77)
      # No locks available
    ENOSYS* = OSErrorCode(78)
      # Function not implemented
    EFTYPE* = OSErrorCode(79)
      # Inappropriate file type or format
    EAUTH* = OSErrorCode(80)
      # Authentication error
    ENEEDAUTH* = OSErrorCode(81)
      # Need authenticator
    EIDRM* = OSErrorCode(82)
      # Identifier removed
    ENOMSG* = OSErrorCode(83)
      # No message of desired type
    EOVERFLOW* = OSErrorCode(84)
      # Value too large to be stored in data type
    ECANCELED* = OSErrorCode(85)
      # Operation canceled
    EILSEQ* = OSErrorCode(86)
      # Illegal byte sequence
    ENOATTR* = OSErrorCode(87)
      # Attribute not found
    EDOOFUS* = OSErrorCode(88)
      # Programming error
    EBADMSG* = OSErrorCode(89)
      # Bad message
    EMULTIHOP* = OSErrorCode(90)
      # Multihop attempted
    ENOLINK* = OSErrorCode(91)
      # Link has been severed
    EPROTO* = OSErrorCode(92)
      # Protocol error
    ENOTCAPABLE* = OSErrorCode(93)
      # Capabilities insufficient
    ECAPMODE* = OSErrorCode(94)
      # Not permitted in capability mode
    ENOTRECOVERABLE* = OSErrorCode(95)
      # State not recoverable
    EOWNERDEAD* = OSErrorCode(96)
      # Previous owner died
    EINTEGRITY* = OSErrorCode(97)
      # Integrity check failed
    ELAST* = OSErrorCode(97)
      # Must be equal largest errno

elif defined(dragonfly) or defined(dragonflybsd):
  ## Source: https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/errno.h
  const
    EPERM* = OSErrorCode(1)
      # Operation not permitted
    ENOENT* = OSErrorCode(2)
      # No such file or directory
    ESRCH* = OSErrorCode(3)
      # No such process
    EINTR* = OSErrorCode(4)
      # Interrupted system call
    EIO* = OSErrorCode(5)
      # Input/output error
    ENXIO* = OSErrorCode(6)
      # Device not configured
    E2BIG* = OSErrorCode(7)
      # Argument list too long
    ENOEXEC* = OSErrorCode(8)
      # Exec format error
    EBADF* = OSErrorCode(9)
      # Bad file descriptor
    ECHILD* = OSErrorCode(10)
      # No child processes
    EDEADLK* = OSErrorCode(11)
      # Resource deadlock avoided
    ENOMEM* = OSErrorCode(12)
      # Cannot allocate memory
    EACCES* = OSErrorCode(13)
      # Permission denied
    EFAULT* = OSErrorCode(14)
      # Bad address
    ENOTBLK* = OSErrorCode(15)
      # Block device required
    EBUSY* = OSErrorCode(16)
      # Device busy
    EEXIST* = OSErrorCode(17)
      # File exists
    EXDEV* = OSErrorCode(18)
      # Cross-device link
    ENODEV* = OSErrorCode(19)
      # Operation not supported by device
    ENOTDIR* = OSErrorCode(20)
      # Not a directory
    EISDIR* = OSErrorCode(21)
      # Is a directory
    EINVAL* = OSErrorCode(22)
      # Invalid argument
    ENFILE* = OSErrorCode(23)
      # Too many open files in system
    EMFILE* = OSErrorCode(24)
      # Too many open files
    ENOTTY* = OSErrorCode(25)
      # Inappropriate ioctl for device
    ETXTBSY* = OSErrorCode(26)
      # Text file busy
    EFBIG* = OSErrorCode(27)
      # File too large
    ENOSPC* = OSErrorCode(28)
      # No space left on device
    ESPIPE* = OSErrorCode(29)
      # Illegal seek
    EROFS* = OSErrorCode(30)
      # Read-only filesystem
    EMLINK* = OSErrorCode(31)
      # Too many links
    EPIPE* = OSErrorCode(32)
      # Broken pipe
    EDOM* = OSErrorCode(33)
      # Numerical argument out of domain
    ERANGE* = OSErrorCode(34)
      # Result too large
    EAGAIN* = OSErrorCode(35)
      # Resource temporarily unavailable
    EWOULDBLOCK* = EAGAIN
      # Operation would block
    EINPROGRESS* = OSErrorCode(36)
      # Operation now in progress
    EALREADY* = OSErrorCode(37)
      # Operation already in progress
    ENOTSOCK* = OSErrorCode(38)
      # Socket operation on non-socket
    EDESTADDRREQ* = OSErrorCode(39)
      # Destination address required
    EMSGSIZE* = OSErrorCode(40)
      # Message too long
    EPROTOTYPE* = OSErrorCode(41)
      # Protocol wrong type for socket
    ENOPROTOOPT* = OSErrorCode(42)
      # Protocol not available
    EPROTONOSUPPORT* = OSErrorCode(43)
      # Protocol not supported
    ESOCKTNOSUPPORT* = OSErrorCode(44)
      # Socket type not supported
    EOPNOTSUPP* = OSErrorCode(45)
      # Operation not supported
    ENOTSUP* = EOPNOTSUPP
      # Operation not supported
    EPFNOSUPPORT* = OSErrorCode(46)
      # Protocol family not supported
    EAFNOSUPPORT* = OSErrorCode(47)
      # Address family not supported by protocol family
    EADDRINUSE* = OSErrorCode(48)
      # Address already in use
    EADDRNOTAVAIL* = OSErrorCode(49)
      # Can't assign requested address
    ENETDOWN* = OSErrorCode(50)
      # Network is down
    ENETUNREACH* = OSErrorCode(51)
      # Network is unreachable
    ENETRESET* = OSErrorCode(52)
      # Network dropped connection on reset
    ECONNABORTED* = OSErrorCode(53)
      # Software caused connection abort
    ECONNRESET* = OSErrorCode(54)
      # Connection reset by peer
    ENOBUFS* = OSErrorCode(55)
      # No buffer space available
    EISCONN* = OSErrorCode(56)
      # Socket is already connected
    ENOTCONN* = OSErrorCode(57)
      # Socket is not connected
    ESHUTDOWN* = OSErrorCode(58)
      # Can't send after socket shutdown
    ETOOMANYREFS* = OSErrorCode(59)
      # Too many references: can't splice
    ETIMEDOUT* = OSErrorCode(60)
      # Operation timed out
    ECONNREFUSED* = OSErrorCode(61)
      # Connection refused
    ELOOP* = OSErrorCode(62)
      # Too many levels of symbolic links
    ENAMETOOLONG* = OSErrorCode(63)
      # File name too long
    EHOSTDOWN* = OSErrorCode(64)
      # Host is down
    EHOSTUNREACH* = OSErrorCode(65)
      # No route to host
    ENOTEMPTY* = OSErrorCode(66)
      # Directory not empty
    EPROCLIM* = OSErrorCode(67)
      # Too many processes
    EUSERS* = OSErrorCode(68)
      # Too many users
    EDQUOT* = OSErrorCode(69)
      # Disc quota exceeded
    ESTALE* = OSErrorCode(70)
      # Stale NFS file handle
    EREMOTE* = OSErrorCode(71)
      # Too many levels of remote in path
    EBADRPC* = OSErrorCode(72)
      # RPC struct is bad
    ERPCMISMATCH* = OSErrorCode(73)
      # RPC version wrong
    EPROGUNAVAIL* = OSErrorCode(74)
      # RPC prog. not avail
    EPROGMISMATCH* = OSErrorCode(75)
      # Program version wrong
    EPROCUNAVAIL* = OSErrorCode(76)
      # Bad procedure for program
    ENOLCK* = OSErrorCode(77)
      # No locks available
    ENOSYS* = OSErrorCode(78)
      # Function not implemented
    EFTYPE* = OSErrorCode(79)
      # Inappropriate file type or format
    EAUTH* = OSErrorCode(80)
      # Authentication error
    ENEEDAUTH* = OSErrorCode(81)
      # Need authenticator
    EIDRM* = OSErrorCode(82)
      # Identifier removed
    ENOMSG* = OSErrorCode(83)
      # No message of desired type
    EOVERFLOW* = OSErrorCode(84)
      # Value too large to be stored in data type
    ECANCELED* = OSErrorCode(85)
      # Operation canceled
    EILSEQ* = OSErrorCode(86)
      # Illegal byte sequence
    ENOATTR* = OSErrorCode(87)
      # Attribute not found
    EDOOFUS* = OSErrorCode(88)
      # Programming error
    EBADMSG* = OSErrorCode(89)
      # Bad message
    EMULTIHOP* = OSErrorCode(90)
      # Multihop attempted
    ENOLINK* = OSErrorCode(91)
      # Link has been severed
    EPROTO* = OSErrorCode(92)
      # Protocol error
    ENOMEDIUM* = OSErrorCode(93)
      # linux
    ENOTRECOVERABLE* = OSErrorCode(94)
      # State not recoverable
    EOWNERDEAD* = OSErrorCode(95)
      # Previous owner died
    EASYNC* = OSErrorCode(99)
      # XXX
    ELAST* = OSErrorCode(99)
      # Must be equal largest errno

elif defined(macos) or defined(macosx):
  ## Source: https://github.com/apple/darwin-xnu/blob/main/bsd/sys/errno.h
  const
    EPERM* = OSErrorCode(1)
      # Operation not permitted
    ENOENT* = OSErrorCode(2)
      # No such file or directory
    ESRCH* = OSErrorCode(3)
      # No such process
    EINTR* = OSErrorCode(4)
      # Interrupted system call
    EIO* = OSErrorCode(5)
      # Input/output error
    ENXIO* = OSErrorCode(6)
      # Device not configured
    E2BIG* = OSErrorCode(7)
      # Argument list too long
    ENOEXEC* = OSErrorCode(8)
      # Exec format error
    EBADF* = OSErrorCode(9)
      # Bad file descriptor
    ECHILD* = OSErrorCode(10)
      # No child processes
    EDEADLK* = OSErrorCode(11)
      # Resource deadlock avoided
    ENOMEM* = OSErrorCode(12)
      # Cannot allocate memory
    EACCES* = OSErrorCode(13)
      # Permission denied
    EFAULT* = OSErrorCode(14)
      # Bad address
    ENOTBLK* = OSErrorCode(15)
      # Block device required
    EBUSY* = OSErrorCode(16)
      # Device / Resource busy
    EEXIST* = OSErrorCode(17)
      # File exists
    EXDEV* = OSErrorCode(18)
      # Cross-device link
    ENODEV* = OSErrorCode(19)
      # Operation not supported by device
    ENOTDIR* = OSErrorCode(20)
      # Not a directory
    EISDIR* = OSErrorCode(21)
      # Is a directory
    EINVAL* = OSErrorCode(22)
      # Invalid argument
    ENFILE* = OSErrorCode(23)
      # Too many open files in system
    EMFILE* = OSErrorCode(24)
      # Too many open files
    ENOTTY* = OSErrorCode(25)
      # Inappropriate ioctl for device
    ETXTBSY* = OSErrorCode(26)
      # Text file busy
    EFBIG* = OSErrorCode(27)
      # File too large
    ENOSPC* = OSErrorCode(28)
      # No space left on device
    ESPIPE* = OSErrorCode(29)
      # Illegal seek
    EROFS* = OSErrorCode(30)
      # Read-only file system
    EMLINK* = OSErrorCode(31)
      # Too many links
    EPIPE* = OSErrorCode(32)
      # Broken pipe
    EDOM* = OSErrorCode(33)
      # Numerical argument out of domain
    ERANGE* = OSErrorCode(34)
      # Result too large
    EAGAIN* = OSErrorCode(35)
      # Resource temporarily unavailable
    EWOULDBLOCK* = EAGAIN
      # Operation would block
    EINPROGRESS* = OSErrorCode(36)
      # Operation now in progress
    EALREADY* = OSErrorCode(37)
      # Operation already in progress
    ENOTSOCK* = OSErrorCode(38)
      # Socket operation on non-socket
    EDESTADDRREQ* = OSErrorCode(39)
      # Destination address required
    EMSGSIZE* = OSErrorCode(40)
      # Message too long
    EPROTOTYPE* = OSErrorCode(41)
      # Protocol wrong type for socket
    ENOPROTOOPT* = OSErrorCode(42)
      # Protocol not available
    EPROTONOSUPPORT* = OSErrorCode(43)
      # Protocol not supported
    ESOCKTNOSUPPORT* = OSErrorCode(44)
      # Socket type not supported
    ENOTSUP* = OSErrorCode(45)
      # Operation not supported
    EPFNOSUPPORT* = OSErrorCode(46)
      # Protocol family not supported
    EAFNOSUPPORT* = OSErrorCode(47)
      # Address family not supported by protocol family
    EADDRINUSE* = OSErrorCode(48)
      # Address already in use
    EADDRNOTAVAIL* = OSErrorCode(49)
      # Can't assign requested address
    ENETDOWN* = OSErrorCode(50)
      # Network is down
    ENETUNREACH* = OSErrorCode(51)
      # Network is unreachable
    ENETRESET* = OSErrorCode(52)
      # Network dropped connection on reset
    ECONNABORTED* = OSErrorCode(53)
      # Software caused connection abort
    ECONNRESET* = OSErrorCode(54)
      # Connection reset by peer
    ENOBUFS* = OSErrorCode(55)
      # No buffer space available
    EISCONN* = OSErrorCode(56)
      # Socket is already connected
    ENOTCONN* = OSErrorCode(57)
      # Socket is not connected
    ESHUTDOWN* = OSErrorCode(58)
      # Can't send after socket shutdown
    ETOOMANYREFS* = OSErrorCode(59)
      # Too many references: can't splice
    ETIMEDOUT* = OSErrorCode(60)
      # Operation timed out
    ECONNREFUSED* = OSErrorCode(61)
      # Connection refused
    ELOOP* = OSErrorCode(62)
      # Too many levels of symbolic links
    ENAMETOOLONG* = OSErrorCode(63)
      # File name too long
    EHOSTDOWN* = OSErrorCode(64)
      # Host is down
    EHOSTUNREACH* = OSErrorCode(65)
      # No route to host
    ENOTEMPTY* = OSErrorCode(66)
      # Directory not empty
    EPROCLIM* = OSErrorCode(67)
      # Too many processes
    EUSERS* = OSErrorCode(68)
      # Too many users
    EDQUOT* = OSErrorCode(69)
      # Disc quota exceeded
    ESTALE* = OSErrorCode(70)
      # Stale NFS file handle
    EREMOTE* = OSErrorCode(71)
      # Too many levels of remote in path
    EBADRPC* = OSErrorCode(72)
      # RPC struct is bad
    ERPCMISMATCH* = OSErrorCode(73)
      # RPC version wrong
    EPROGUNAVAIL* = OSErrorCode(74)
      # RPC prog. not avail
    EPROGMISMATCH* = OSErrorCode(75)
      # Program version wrong
    EPROCUNAVAIL* = OSErrorCode(76)
      # Bad procedure for program
    ENOLCK* = OSErrorCode(77)
      # No locks available
    ENOSYS* = OSErrorCode(78)
      # Function not implemented
    EFTYPE* = OSErrorCode(79)
      # Inappropriate file type or format
    EAUTH* = OSErrorCode(80)
      # Authentication error
    ENEEDAUTH* = OSErrorCode(81)
      # Need authenticator
    EPWROFF* = OSErrorCode(82)
      # Device power is off
    EDEVERR* = OSErrorCode(83)
      # Device error, e.g. paper out
    EOVERFLOW* = OSErrorCode(84)
      # Value too large to be stored in data type
    EBADEXEC* = OSErrorCode(85)
      # Bad executable
    EBADARCH* = OSErrorCode(86)
      # Bad CPU type in executable
    ESHLIBVERS* = OSErrorCode(87)
      # Shared library version mismatch
    EBADMACHO* = OSErrorCode(88)
      # Malformed Macho file
    ECANCELED* = OSErrorCode(89)
      # Operation canceled
    EIDRM* = OSErrorCode(90)
      # Identifier removed
    ENOMSG* = OSErrorCode(91)
      # No message of desired type
    EILSEQ* = OSErrorCode(92)
      # Illegal byte sequence
    ENOATTR* = OSErrorCode(93)
      # Attribute not found
    EBADMSG* = OSErrorCode(94)
      # Bad message
    EMULTIHOP* = OSErrorCode(95)
      # Reserved
    ENODATA* = OSErrorCode(96)
      # No message available on STREAM
    ENOLINK* = OSErrorCode(97)
      # Reserved
    ENOSR* = OSErrorCode(98)
      # No STREAM resources
    ENOSTR* = OSErrorCode(99)
      # Not a STREAM
    EPROTO* = OSErrorCode(100)
      # Protocol error
    ETIME* = OSErrorCode(101)
      # STREAM ioctl timeout
    EOPNOTSUPP* = OSErrorCode(102)
      # Operation not supported on socket
    ENOPOLICY* = OSErrorCode(103)
      # No such policy registered
    ENOTRECOVERABLE* = OSErrorCode(104)
      # State not recoverable
    EOWNERDEAD* = OSErrorCode(105)
      # Previous owner died
    EQFULL* = OSErrorCode(106)
      # Interface output queue is full
    ELAST* = OSErrorCode(106)
      # Must be equal largest errno

elif defined(linux):
  ## Source: https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/errno-base.h
  ##         https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/errno.h
  const
    EPERM* = OSErrorCode(1)
      # Operation not permitted
    ENOENT* = OSErrorCode(2)
      # No such file or directory
    ESRCH* = OSErrorCode(3)
      # No such process
    EINTR* = OSErrorCode(4)
      # Interrupted system call
    EIO* = OSErrorCode(5)
      # I/O error
    ENXIO* = OSErrorCode(6)
      # No such device or address
    E2BIG* = OSErrorCode(7)
      # Argument list too long
    ENOEXEC* = OSErrorCode(8)
      # Exec format error
    EBADF* = OSErrorCode(9)
      # Bad file number
    ECHILD* = OSErrorCode(10)
      # No child processes
    EAGAIN* = OSErrorCode(11)
      # Try again
    ENOMEM* = OSErrorCode(12)
      # Out of memory
    EACCES* = OSErrorCode(13)
      # Permission denied
    EFAULT* = OSErrorCode(14)
      # Bad address
    ENOTBLK* = OSErrorCode(15)
      # Block device required
    EBUSY* = OSErrorCode(16)
      # Device or resource busy
    EEXIST* = OSErrorCode(17)
      # File exists
    EXDEV* = OSErrorCode(18)
      # Cross-device link
    ENODEV* = OSErrorCode(19)
      # No such device
    ENOTDIR* = OSErrorCode(20)
      # Not a directory
    EISDIR* = OSErrorCode(21)
      # Is a directory
    EINVAL* = OSErrorCode(22)
      # Invalid argument
    ENFILE* = OSErrorCode(23)
      # File table overflow
    EMFILE* = OSErrorCode(24)
      # Too many open files
    ENOTTY* = OSErrorCode(25)
      # Not a typewriter
    ETXTBSY* = OSErrorCode(26)
      # Text file busy
    EFBIG* = OSErrorCode(27)
      # File too large
    ENOSPC* = OSErrorCode(28)
      # No space left on device
    ESPIPE* = OSErrorCode(29)
      # Illegal seek
    EROFS* = OSErrorCode(30)
      # Read-only file system
    EMLINK* = OSErrorCode(31)
      # Too many links
    EPIPE* = OSErrorCode(32)
      # Broken pipe
    EDOM* = OSErrorCode(33)
      # Math argument out of domain of func
    ERANGE* = OSErrorCode(34)
      # Math result not representable
    EDEADLK* = OSErrorCode(35)
      # Resource deadlock would occur
    ENAMETOOLONG* = OSErrorCode(36)
      # File name too long
    ENOLCK* = OSErrorCode(37)
      # No record locks available
    ENOSYS* = OSErrorCode(38)
      # Invalid system call number
    ENOTEMPTY* = OSErrorCode(39)
      # Directory not empty
    ELOOP* = OSErrorCode(40)
      # Too many symbolic links encountered
    EWOULDBLOCK* = EAGAIN
      # Operation would block
    ENOMSG* = OSErrorCode(42)
      # No message of desired type
    EIDRM* = OSErrorCode(43)
      # Identifier removed
    ECHRNG* = OSErrorCode(44)
      # Channel number out of range
    EL2NSYNC* = OSErrorCode(45)
      # Level 2 not synchronized
    EL3HLT* = OSErrorCode(46)
      # Level 3 halted
    EL3RST* = OSErrorCode(47)
      # Level 3 reset
    ELNRNG* = OSErrorCode(48)
      # Link number out of range
    EUNATCH* = OSErrorCode(49)
      # Protocol driver not attached
    ENOCSI* = OSErrorCode(50)
      # No CSI structure available
    EL2HLT* = OSErrorCode(51)
      # Level 2 halted
    EBADE* = OSErrorCode(52)
      # Invalid exchange
    EBADR* = OSErrorCode(53)
      # Invalid request descriptor
    EXFULL* = OSErrorCode(54)
      # Exchange full
    ENOANO* = OSErrorCode(55)
      # No anode
    EBADRQC* = OSErrorCode(56)
      # Invalid request code
    EBADSLT* = OSErrorCode(57)
      # Invalid slot
    EDEADLOCK* = EDEADLK
      # Resource deadlock would occur
    EBFONT* = OSErrorCode(59)
      # Bad font file format
    ENOSTR* = OSErrorCode(60)
      # Device not a stream
    ENODATA* = OSErrorCode(61)
      # No data available
    ETIME* = OSErrorCode(62)
      # Timer expired
    ENOSR* = OSErrorCode(63)
      # Out of streams resources
    ENONET* = OSErrorCode(64)
      # Machine is not on the network
    ENOPKG* = OSErrorCode(65)
      # Package not installed
    EREMOTE* = OSErrorCode(66)
      # Object is remote
    ENOLINK* = OSErrorCode(67)
      # Link has been severed
    EADV* = OSErrorCode(68)
      # Advertise error
    ESRMNT* = OSErrorCode(69)
      # Srmount error
    ECOMM* = OSErrorCode(70)
      # Communication error on send
    EPROTO* = OSErrorCode(71)
      # Protocol error
    EMULTIHOP* = OSErrorCode(72)
      # Multihop attempted
    EDOTDOT* = OSErrorCode(73)
      # RFS specific error
    EBADMSG* = OSErrorCode(74)
      # Not a data message
    EOVERFLOW* = OSErrorCode(75)
      # Value too large for defined data type
    ENOTUNIQ* = OSErrorCode(76)
      # Name not unique on network
    EBADFD* = OSErrorCode(77)
      # File descriptor in bad state
    EREMCHG* = OSErrorCode(78)
      # Remote address changed
    ELIBACC* = OSErrorCode(79)
      # Can not access a needed shared library
    ELIBBAD* = OSErrorCode(80)
      # Accessing a corrupted shared library
    ELIBSCN* = OSErrorCode(81)
      # .lib section in a.out corrupted
    ELIBMAX* = OSErrorCode(82)
      # Attempting to link in too many shared libraries
    ELIBEXEC* = OSErrorCode(83)
      # Cannot exec a shared library directly
    EILSEQ* = OSErrorCode(84)
      # Illegal byte sequence
    ERESTART* = OSErrorCode(85)
      # Interrupted system call should be restarted
    ESTRPIPE* = OSErrorCode(86)
      # Streams pipe error
    EUSERS* = OSErrorCode(87)
      # Too many users
    ENOTSOCK* = OSErrorCode(88)
      # Socket operation on non-socket
    EDESTADDRREQ* = OSErrorCode(89)
      # Destination address required
    EMSGSIZE* = OSErrorCode(90)
      # Message too long
    EPROTOTYPE* = OSErrorCode(91)
      # Protocol wrong type for socket
    ENOPROTOOPT* = OSErrorCode(92)
      # Protocol not available
    EPROTONOSUPPORT* = OSErrorCode(93)
      # Protocol not supported
    ESOCKTNOSUPPORT* = OSErrorCode(94)
      # Socket type not supported
    EOPNOTSUPP* = OSErrorCode(95)
      # Operation not supported on transport endpoint
    EPFNOSUPPORT* = OSErrorCode(96)
      # Protocol family not supported
    EAFNOSUPPORT* = OSErrorCode(97)
      # Address family not supported by protocol
    EADDRINUSE* = OSErrorCode(98)
      # Address already in use
    EADDRNOTAVAIL* = OSErrorCode(99)
      # Cannot assign requested address
    ENETDOWN* = OSErrorCode(100)
      # Network is down
    ENETUNREACH* = OSErrorCode(101)
      # Network is unreachable
    ENETRESET* = OSErrorCode(102)
      # Network dropped connection because of reset
    ECONNABORTED* = OSErrorCode(103)
      # Software caused connection abort
    ECONNRESET* = OSErrorCode(104)
      # Connection reset by peer
    ENOBUFS* = OSErrorCode(105)
      # No buffer space available
    EISCONN* = OSErrorCode(106)
      # Transport endpoint is already connected
    ENOTCONN* = OSErrorCode(107)
      # Transport endpoint is not connected
    ESHUTDOWN* = OSErrorCode(108)
      # Cannot send after transport endpoint shutdown
    ETOOMANYREFS* = OSErrorCode(109)
      # Too many references: cannot splice
    ETIMEDOUT* = OSErrorCode(110)
      # Connection timed out
    ECONNREFUSED* = OSErrorCode(111)
      # Connection refused
    EHOSTDOWN* = OSErrorCode(112)
      # Host is down
    EHOSTUNREACH* = OSErrorCode(113)
      # No route to host
    EALREADY* = OSErrorCode(114)
      # Operation already in progress
    EINPROGRESS* = OSErrorCode(115)
      # Operation now in progress
    ESTALE* = OSErrorCode(116)
      # Stale file handle
    EUCLEAN* = OSErrorCode(117)
      # Structure needs cleaning
    ENOTNAM* = OSErrorCode(118)
      # Not a XENIX named type file
    ENAVAIL* = OSErrorCode(119)
      # No XENIX semaphores available
    EISNAM* = OSErrorCode(120)
      # Is a named type file
    EREMOTEIO* = OSErrorCode(121)
      # Remote I/O error
    EDQUOT* = OSErrorCode(122)
      # Quota exceeded
    ENOMEDIUM* = OSErrorCode(123)
      # No medium found
    EMEDIUMTYPE* = OSErrorCode(124)
      # Wrong medium type
    ECANCELED* = OSErrorCode(125)
      # Operation Canceled
    ENOKEY* = OSErrorCode(126)
      # Required key not available
    EKEYEXPIRED* = OSErrorCode(127)
      # Key has expired
    EKEYREVOKED* = OSErrorCode(128)
      # Key has been revoked
    EKEYREJECTED* = OSErrorCode(129)
      # Key was rejected by service
    EOWNERDEAD* = OSErrorCode(130)
      # Owner died
    ENOTRECOVERABLE* = OSErrorCode(131)
      # State not recoverable
    ERFKILL* = OSErrorCode(132)
      # Operation not possible due to RF-kill
    EHWPOISON* = OSErrorCode(133)
      # Memory page has hardware error
elif defined(windows):
  const
    ERROR_SUCCESS* = OSErrorCode(0)
    ERROR_FILE_NOT_FOUND* = OSErrorCode(2)
    ERROR_TOO_MANY_OPEN_FILES* = OSErrorCode(4)
    ERROR_ACCESS_DENIED* = OSErrorCode(5)
    ERROR_ALREADY_EXISTS* = OSErrorCode(183)
    ERROR_NOT_SUPPORTED* = OSErrorCode(50)
    ERROR_BROKEN_PIPE* = OSErrorCode(109)
    ERROR_BUFFER_OVERFLOW* = OSErrorCode(111)
    ERROR_PIPE_BUSY* = OSErrorCode(231)
    ERROR_NO_DATA* = OSErrorCode(232)
    ERROR_PIPE_NOT_CONNECTED* = OSErrorCode(233)
    ERROR_PIPE_CONNECTED* = OSErrorCode(535)
    ERROR_OPERATION_ABORTED* = OSErrorCode(995)
    ERROR_IO_PENDING* = OSErrorCode(997)
    ERROR_CONNECTION_REFUSED* = OSErrorCode(1225)
    ERROR_CONNECTION_ABORTED* = OSErrorCode(1236)
    WSAEMFILE* = OSErrorCode(10024)
    WSAEAFNOSUPPORT* = OSErrorCode(10047)
    WSAENETDOWN* = OSErrorCode(10050)
    WSAENETRESET* = OSErrorCode(10052)
    WSAECONNABORTED* = OSErrorCode(10053)
    WSAECONNRESET* = OSErrorCode(10054)
    WSAENOBUFS* = OSErrorCode(10055)
    WSAETIMEDOUT* = OSErrorCode(10060)
    WSAEADDRINUSE* = OSErrorCode(10048)
    WSAEDISCON* = OSErrorCode(10101)
    WSANOTINITIALISED* = OSErrorCode(10093)
    WSAENOTSOCK* = OSErrorCode(10038)
    WSAEINPROGRESS* = OSErrorCode(10036)
    WSAEINTR* = OSErrorCode(10004)
    WSAEWOULDBLOCK* = OSErrorCode(10035)
    ERROR_NETNAME_DELETED* = OSErrorCode(64)
    STATUS_PENDING* = OSErrorCode(0x103)

else:
  {.fatal: "Operation system is not yet supported!".}
