;----------------------------------------------------------------------------
; ASM Function calls for bsdsocket.library functions v1.0 by Roger Light 1999.
;
; Only functions used in Paul Burkey's TCPFuncs.bb2 have been tested (and those
; not much...)
; Use at your own risk!
;
; Allows non-restrictive use of bsdsocket.library - ie bsdsocket.library
; doesn't have to be open on your program startup.
;
; See MiamiSDK from Nordic Global for function descriptions.
;
; Functions are named as follows:
;
; socket_() changes to socket{}
;
; I recommend that you extract only the functions that you need, to save on
; executable size. If you do use any of these functions, please mention me
; in your docs ;)
;
; Contact me at rogerlight@mindless.com


;----------------------------------------------------------------------------

Function.l socket{domain.l, type_.l, protocol.l}
;                   d0        d1        d2
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6
  JSR -30(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l bind{s.l, *name.l, namelen.l}
;                d0     a0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6
                      ; s.l in d0
  MOVE.l d1,a0        ; *name.l in a0
  MOVE.l d2,d1        ; namelen.l in d1

  JSR -36(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l listen{s.l, backlog.l}
;                  d0     d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -42(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l accept{s.l,  *addr_.l, *addrlen.l}
;                  d0     a0          a1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6
                      ; s.l in d0
  MOVE.l d1,a0        ; *addr_.l in a0
  MOVE.l d2,a1        ; *addrlen.l in a1

  JSR -48(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l connect{s.l, *name.l, namelen.l}
;                   d0    a0        d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1

  JSR -54(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l sendto{s.l, *buf.l, len_.l, flags.l, *to_.l, tolen.l}
;                 d0     a0      d1      d2       a1      d3
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1
  MOVE.l d3,d2
  MOVE.l d4,a1
  MOVE.l d5,d3

  JSR -60(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l send{s.l, *buf.l, len_.l, flags.l}
;                d0    a0      d1      d2
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1
  MOVE.l d3,d2

  JSR -66(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l recvfrom{s.l, *buf.l, len_.l, flags.l, *addr_.l, *addrlen.l}
;                    d0    a0      d1      d2        a1         a2
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1
  MOVE.l d3,d2
  MOVE.l d4,a1
  MOVE.l d5,a2

  JSR -72(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l recv{s.l, *buf.l, len_.l, flags.l}
;                d0    a0      d1      d2
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1
  MOVE.l d3,d2

  JSR -78(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l shutdown{s.l, how.l}
;                    d0   d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -84(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l setsockopt{s.l, level.l, optname.l, *optval.l, optlen.l}
;                      d0     d1       d2         a0        d3
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d3,a0
  MOVE.l d4,d3

  JSR -90(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getsockopt{s.l, level.l, optname.l, *optval.l, *optlen.l}
;                      d0     d1      d2          a0          a1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d3,a0
  MOVE.l d4,a1

  JSR -96(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getsockname{s.l, *name.l, *namelen.l}
;                       d0    a0        a1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,a1

  JSR -102(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getpeername{s.l, *name.l, *namelen.l}
;                       d0    a0        a1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,a1

  JSR -108(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l IoctlSocket{s.l, req.l, *argp.l}
;                       d0    d1      a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d2,a0

  JSR -114(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Statement CloseSocket{s.l}
;                       d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6
                        ; s.l in d0
  JSR -120(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Statement

;----

Function.l WaitSelect{nfds.l, *readfds.l, *writefds.l, *exceptfds.l, *timeout.l, *signal.l}
;                       d0        a0          a1            a2           a3         d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,a1
  MOVE.l d3,a2
  MOVE.l d4,a3
  MOVE.l d5,d1

  JSR -126(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l SetSocketSignals{intmask.l, iomask.l, urgentmask.l}
;                             d0          d1          d2
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -132(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getdtablesize{}
;                       void
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -138(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l ObtainSocket{id.l, domain.l, type_.l, protocol.l}
;                        d0     d1        d2        d3
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -144(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l ReleaseSocket{s.l, id.l}
;                         d0   d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -150(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l ReleaseCopyOfSocket{s.l, id.l}
;                               d0    d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -156(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l Errno{}
;                void
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -162(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l SetErrnoPtr{*errnop.l, size.l}
;                         a0        d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0
  MOVE.l d1,d0

  JSR -168(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l Inet_NtoA{ip.l}
;                     d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -174(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l inet_addr{*cp.l}
;                      a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -180(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l Inet_LnaOf{in.l}
;                      d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -186(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l Inet_NetOf{in.l}
;                      d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -192(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l Inet_MakeAddr{net.l, host.l}
;                         d0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -198(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l inet_network{*cp.l}
;                        a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -204(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l gethostbyname{*name.l}
;                           a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -210(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l gethostbyaddr{*addr_.l, len_.l, type_.l}
;                           a0        d0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0
  MOVE.l d1,d0
  MOVE.l d2,d1

  JSR -216(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getnetbyname{ *name.l}
;                          a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -222(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getnetbyaddr{net.l, type_.l}
;                         d0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -228(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getservbyname{*name.l, *proto.l}
;                           a0        a1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0
  MOVE.l d1,a1

  JSR -234(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getservbyport{port.l, *proto.l}
;                           d0      a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0

  JSR -240(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getprotobyname{*name.l}
;                           a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -246(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l getprotobynumber{id.l}
;                            d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -252(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l vsyslog{pri.l, *msg.l, args.l}
;                    d0     a0      a1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,a1

  JSR -258(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l Dup2Socket{olds.l, news.l}
;                       d0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -264(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l sendmsg{s.l, *msg.l, flags.l}
;                   d0    a0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1

  JSR -270(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l recvmsg{s.l, *msg.l, flags.l}
;                   d0    a0      d1
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d1,a0
  MOVE.l d2,d1

  JSR -276(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l gethostname{*name.l, namelen.l}
;                         a0        d0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0
  MOVE.l d1,d0

  JSR -282(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l gethostid{}
;                   void
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  JSR -288(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l SocketBaseTagList{*tags.l}
;                               a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -294(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function

;----

Function.l GetSocketEvents{*eventsp.l}
;                               a0
  SHARED SocketBase.l
  MOVE.l a6,-(a7)
  GetReg d6,SocketBase
  MOVE.l d6,a6

  MOVE.l d0,a0

  JSR -300(a6)

  MOVE.l (a7)+,a6
  AsmExit
End Function
