* === rexxbind.asm =====================================================
*
* Copyright (c) 1986, 1987 by William S. Hawes (All Rights Reserved)
*
* ======================================================================
* "Glue" routines for calling functions in the ARexx Systems Library.
* All calls assume that the external _RexxSysBase has been set to the
* ARexx SYstems library base by a call to OpenLibrary.

	section text,CODE

	 INCLUDE  "rexx/storage.i"
	 INCLUDE  "rexx/rxslib.i"

	 XREF	  _RexxSysBase

* First calling convention:
* 1, 2, or 3 parameters in (A0,A1,D0), return value in D0.

	 ; msgptr = CreateRexxMsg(&replyport,&fileext,&hostname)

	 XDEF	  _CreateRexxMsg
_CreateRexxMsg:
	 move.w   #_LVOCreateRexxMsg,d1
	 bra.s	  CallSeq1


	 ; DeleteArgstring(argptr)

	 XDEF	  _DeleteArgstring
_DeleteArgstring:
	 move.w   #_LVODeleteArgstring,d1
	 bra.s	  CallSeq1


	 ; DeleteRexxMsg(msgptr)

	 XDEF	  _DeleteRexxMsg
_DeleteRexxMsg:
	 move.w   #_LVODeleteRexxMsg,d1
	 bra.s	  CallSeq1


	 ; FreePort(&msgport)

	 XDEF	  _FreePort
_FreePort:
	 move.w   #_LVOFreePort,d1
	 bra.s	  CallSeq1


	 ; signal = InitPort(&replyport)

	 XDEF	  _InitPort
_InitPort:
	 move.w   #_LVOInitPort,d1
	 bra.s	  CallSeq1


	 ; boolean = IsRexxMsg(msgptr)

	 XDEF	  _IsRexxMsg
_IsRexxMsg:
	 move.w   #_LVOIsRexxMsg,d1
	 bra.s	  CallSeq1

	 ; Load three arguments into (A0,A1,D0)

	 nop	    ;fix lattice assembler bug

CallSeq1 movea.l  4(sp),a0
	 movea.l  8(sp),a1
	 move.l   12(sp),d0


	 ; Call the library function

CallFunc move.l   a6,-(sp)
	 movea.l  _RexxSysBase(A4),a6
	 jsr	  0(a6,d1.w)
	 movea.l  (sp)+,a6
	 rts


* Second calling convention:  2 parameters in (A0,D0), return value in D0.

	 ; argptr = CreateArgstring(&string,length)

	 XDEF	  _CreateArgstring
_CreateArgstring:
	 moveq	  #_LVOCreateArgstring,d1
	 bra.s	  CallSeq2


	 ; ClearMem(address,length)

	 XDEF	  _ClearMem
_ClearMem:
	 move.w   #_LVOClearMem,d1
	 bra.s	  CallSeq2


	 ; Load two arguments (A0,D0)

	 nop	;fix lattice assembler bug

CallSeq2 movea.l  4(sp),a0
	 move.l   8(sp),d0
	 bra	  CallFunc

	 END

