****************************************************************************
*             Benchmark Modula-2 from Avant-Garde Software                 *
****************************************************************************
* Name: ARexx.ASM                         Version: Amiga.00.00             *
* Created: 03/21/88   Updated: 04/03/88   Author: Leon Frenkel             *
* Description: Benchmark Modula-2 interface to AREXX.                      *
****************************************************************************

	INCLUDE	'M2/M2Lib.i'

LIB_VECTSIZE    EQU     6
LIB_RESERVED    EQU     4
LIB_BASE        EQU     $FFFFFFFA       * (-LIB_VECTSIZE)
LIB_USERDEF     EQU     LIB_BASE-(LIB_RESERVED*LIB_VECTSIZE)
LIB_NONSTD      EQU     LIB_USERDEF

LIBINIT     MACRO   * [baseOffset]
            IFC     '\1',''
COUNT_LIB   SET     LIB_USERDEF
            ENDC
            IFNC    '\1',''
COUNT_LIB   SET     \1
            ENDC
            ENDM

LIBDEF      MACRO   * libraryFunctionSymbol
\1          EQU     COUNT_LIB
COUNT_LIB   SET     COUNT_LIB-LIB_VECTSIZE
            ENDM

         LIBINIT
         LIBDEF   _LVORexx             ; Main entry point
         LIBDEF   _LVOrxParse          ; (private)
         LIBDEF   _LVOrxInstruct       ; (private)
         LIBDEF   _LVOrxSuspend        ; (private)
         LIBDEF   _LVOEvalOp           ; (private)

         LIBDEF   _LVOAssignValue      ; (private)
         LIBDEF   _LVOEnterSymbol      ; (private)
         LIBDEF   _LVOFetchValue       ; (private)
         LIBDEF   _LVOLookUpValue      ; (private)
         LIBDEF   _LVOSetValue         ; (private)
         LIBDEF   _LVOSymExpand        ; (private)

         LIBDEF   _LVOErrorMsg
         LIBDEF   _LVOIsSymbol
         LIBDEF   _LVOCurrentEnv
         LIBDEF   _LVOGetSpace
         LIBDEF   _LVOFreeSpace

         LIBDEF   _LVOCreateArgstring
         LIBDEF   _LVODeleteArgstring
         LIBDEF   _LVOLengthArgstring
         LIBDEF   _LVOCreateRexxMsg
         LIBDEF   _LVODeleteRexxMsg
         LIBDEF   _LVOClearRexxMsg
         LIBDEF   _LVOFillRexxMsg
         LIBDEF   _LVOIsRexxMsg

         LIBDEF   _LVOAddRsrcNode
         LIBDEF   _LVOFindRsrcNode
         LIBDEF   _LVORemRsrcList
         LIBDEF   _LVORemRsrcNode
         LIBDEF   _LVOOpenPublicPort
         LIBDEF   _LVOClosePublicPort
         LIBDEF   _LVOListNames

         LIBDEF   _LVOClearMem
         LIBDEF   _LVOInitList
         LIBDEF   _LVOInitPort
         LIBDEF   _LVOFreePort

         LIBDEF   _LVOCmpString
         LIBDEF   _LVOStcToken
         LIBDEF   _LVOStrcmpN
         LIBDEF   _LVOStrcmpU
         LIBDEF   _LVOStrcpyA
         LIBDEF   _LVOStrcpyN
         LIBDEF   _LVOStrcpyU
         LIBDEF   _LVOStrflipN
         LIBDEF   _LVOStrlen
         LIBDEF   _LVOToUpper

         LIBDEF   _LVOCVa2i
         LIBDEF   _LVOCVi2a
         LIBDEF   _LVOCVi2arg
         LIBDEF   _LVOCVi2az
         LIBDEF   _LVOCVc2x
         LIBDEF   _LVOCVx2c

         LIBDEF   _LVOOpenF
         LIBDEF   _LVOCloseF
         LIBDEF   _LVOReadStr
         LIBDEF   _LVOReadF
         LIBDEF   _LVOWriteF
         LIBDEF   _LVOSeekF
         LIBDEF   _LVOQueueF
         LIBDEF   _LVOStackF
         LIBDEF   _LVOExistF

         LIBDEF   _LVODOSCommand
         LIBDEF   _LVODOSRead
         LIBDEF   _LVODOSWrite
         LIBDEF   _LVOCreateDOSPkt
         LIBDEF   _LVODeleteDOSPkt
         LIBDEF   _LVOSendDOSPkt
         LIBDEF   _LVOWaitDOSPkt
         LIBDEF   _LVOFindDevice

         LIBDEF   _LVOAddClipNode
         LIBDEF   _LVORemClipNode
         LIBDEF   _LVOLockRexxBase
         LIBDEF   _LVOUnlockRexxBase

	DEFINITION_PROCEDURES	57
	DEF_PROC	MODULE_BODY
	DEF_PROC	AddClipNode
	DEF_PROC	AddRsrcNode
	DEF_PROC	ClearMem
	DEF_PROC	ClearRexxMsg
	DEF_PROC	CloseF
	DEF_PROC	ClosePublicPort
	DEF_PROC	CmpString
	DEF_PROC	CreateArgstring
	DEF_PROC	CreateDOSPkt
	DEF_PROC	CreateRexxMsg
	DEF_PROC	CVa2i
	DEF_PROC	CVc2x
	DEF_PROC	CVi2a
	DEF_PROC	CVi2arg
	DEF_PROC	CVi2az
	DEF_PROC	CVx2c
	DEF_PROC	CurrentEnv
	DEF_PROC	DeleteArgstring
	DEF_PROC	DeleteDOSPkt
	DEF_PROC	DeleteRexxMsg
	DEF_PROC	DOSRead
	DEF_PROC	DOSWrite
	DEF_PROC	ErrorMsg
	DEF_PROC	ExistF
	DEF_PROC	FillRexxMsg
	DEF_PROC	FindDevice
	DEF_PROC	FindRsrcNode
	DEF_PROC	FreePort
	DEF_PROC	FreeSpace
	DEF_PROC	GetSpace
	DEF_PROC	InitList
	DEF_PROC	InitPort
	DEF_PROC	IsRexxMsg
	DEF_PROC	IsSymbol
	DEF_PROC	LengthArgstring
	DEF_PROC	ListNames
	DEF_PROC	LockRexxBase
	DEF_PROC	OpenF
	DEF_PROC	OpenPublicPort
	DEF_PROC	QueueF
	DEF_PROC	ReadF
	DEF_PROC	ReadStr
	DEF_PROC	RemClipNode
	DEF_PROC	RemRsrcList
	DEF_PROC	RemRsrcNode
	DEF_PROC	SeekF
	DEF_PROC	StackF
	DEF_PROC	StcToken
	DEF_PROC	StrcpyA
	DEF_PROC	StrcpyN
	DEF_PROC	StrcpyU
	DEF_PROC	StrflipN
	DEF_PROC	Strlen
	DEF_PROC	StrcmpN
	DEF_PROC	ToUpper
	DEF_PROC	UnlockRexxBase
	DEF_PROC	WriteF


	DEFINITION_MODULES	0

	DEFINITION_VARIABLES
	VAR	RexxSysBase,POINTER

	IMPLEMENTATION_VARIABLES

	START_CODE

;---------------------------------------------------------------------------
	PARAMETER_LIST	4,0
	END_PARAMETER_LIST

	PROCEDURE_CODE	MODULE_BODY

	EMPTY_MODULE_BODY
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	AddClipNode_list,POINTER
	VAR	AddClipNode_name,ADDRESS
	VAR	AddClipNode_length,LONGCARD
	VAR	AddClipNode_value,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	AddClipNode
	move.L	AddClipNode_list(A7),A0
	move.L	AddClipNode_name(A7),A1
	move.L	AddClipNode_length(A7),D0
	move.L	AddClipNode_value(A7),D1
	move.L	RexxSysBase(PC),A6
	JUMP	AddClipNode
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	AddRsrcNode_list,POINTER
	VAR	AddRsrcNode_name,ADDRESS
	VAR	AddRsrcNode_length,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	AddRsrcNode
	move.L	AddRsrcNode_list(A7),A0
	move.L	AddRsrcNode_name(A7),A1
	move.L	AddRsrcNode_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	AddRsrcNode
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	ClearMem_address,ADDRESS
	VAR	ClearMem_length,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	ClearMem
	move.L	ClearMem_address(A7),A0
	move.L	ClearMem_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	ClearMem
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	ClearRexxMsg_msgptr,POINTER
	VAR	ClearRexxMsg_count,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	ClearRexxMsg
	move.L	ClearRexxMsg_msgptr(A7),A0
	move.L	ClearRexxMsg_count(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	ClearRexxMsg
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	CloseF_ioBuff,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	CloseF
	move.L	CloseF_ioBuff(A7),A0
	move.L	RexxSysBase(PC),A6
	CALL	CloseF
	neg.B	D0			; (-1 --> 1), (0 --> 0)
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	ClosePublicPort_node,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	ClosePublicPort
	move.L	ClosePublicPort_node(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	ClosePublicPort
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	CmpString_ss1,POINTER
	VAR	CmpString_ss2,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	CmpString
	move.L	CmpString_ss1(A7),A0
	move.L	CmpString_ss2(A7),A1
	move.L	RexxSysBase(PC),A6
	JUMP	CmpString
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	CreateArgstring_string,ADDRESS
	VAR	CreateArgstring_length,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	CreateArgstring
	move.L	CreateArgstring_string(A7),A0
	move.L	CreateArgstring_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	CreateArgstring
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,0
	END_PARAMETER_LIST

	PROCEDURE_CODE	CreateDOSPkt
	move.L	RexxSysBase(PC),A6
	JUMP	CreateDOSPkt
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	CreateRexxMsg_replyport,POINTER
	VAR	CreateRexxMsg_extension,ADDRESS
	VAR	CreateRexxMsg_host,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	CreateRexxMsg
	move.L	CreateRexxMsg_replyport(A7),A0
	move.L	CreateRexxMsg_extension(A7),A1
	move.L	CreateRexxMsg_host(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	CreateRexxMsg
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	CVa2i_buffer,ADDRESS
	VAR	CVa2i_value,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	CVa2i
	move.L	CVa2i_buffer(A7),A0
	move.L	RexxSysBase(PC),A6
	CALL	CVa2i
	move.L	CVa2i_value(A7),A0
	move.L	D1,(A0)			; value := D1
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	CVc2x_outbuff,ADDRESS
	VAR	CVc2x_string,ADDRESS
	VAR	CVc2x_length,LONGINT
	VAR	CVc2x_mode,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	CVc2x
	move.L	CVc2x_outbuff(A7),A0
	move.L	CVc2x_string(A7),A1
	move.L	CVc2x_length(A7),D0
	move.L	CVc2x_mode(A7),D1
	move.L	RexxSysBase(PC),A6
	JUMP	CVc2x
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	CVi2a_buffer,ADDRESS
	VAR	CVi2a_value,LONGINT
	VAR	CVi2a_digits,LONGINT
	VAR	CVi2a_pointer,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	CVi2a
	move.L	CVi2a_buffer(A7),A0
	move.L	CVi2a_value(A7),D0
	move.L	CVi2a_digits(A7),D1
	move.L	RexxSysBase(PC),A6
	CALL	CVi2a
	move.L	CVi2a_pointer(A7),A1
	move.L	A0,(A1)			; pointer := A0
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	CVi2arg_value,LONGINT
	VAR	CVi2arg_digits,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	CVi2arg
	move.L	CVi2arg_value(A7),D0
	move.L	CVi2arg_digits(A7),D1
	move.L	RexxSysBase(PC),A6
	JUMP	CVi2arg
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	CVi2az_buffer,ADDRESS
	VAR	CVi2az_value,LONGINT
	VAR	CVi2az_digits,LONGINT
	VAR	CVi2az_pointer,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	CVi2az
	move.L	RexxSysBase(PC),A6
	move.L	CVi2az_buffer(A7),A0
	move.L	CVi2az_value(A7),D0
	move.L	CVi2az_digits(A7),D1
	CALL	CVi2az
	move.L	CVi2az_pointer(A7),A1
	move.L	A0,(A1)			; pointer := A0
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	CVx2c_outbuff,ADDRESS
	VAR	CVx2c_string,ADDRESS
	VAR	CVx2c_length,LONGINT
	VAR	CVx2c_mode,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	CVx2c
	move.L	CVx2c_outbuff(A7),A0
	move.L	CVx2c_string(A7),A1
	move.L	CVx2c_length(A7),D0
	move.L	CVx2c_mode(A7),D1
	move.L	RexxSysBase(PC),A6
	JUMP	CVx2c
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	CurrentEnv_rxtptr,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	CurrentEnv
	move.L	CurrentEnv_rxtptr(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	CurrentEnv
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	DeleteArgstring_argstring,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	DeleteArgstring
	move.L	DeleteArgstring_argstring(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	DeleteArgstring
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	DeleteDOSPkt_message,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	DeleteDOSPkt
	move.L	DeleteDOSPkt_message(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	DeleteDOSPkt
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	DeleteRexxMsg_packet,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	DeleteRexxMsg
	move.L	DeleteRexxMsg_packet(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	DeleteRexxMsg
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	DOSRead_filehandle,ADDRESS
	VAR	DOSRead_buffer,ADDRESS
	VAR	DOSRead_length,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	DOSRead
	move.L	DOSRead_filehandle(A7),A0
	move.L	DOSRead_buffer(A7),A1
	move.L	DOSRead_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	DOSRead
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	DOSWrite_filehandle,ADDRESS
	VAR	DOSWrite_buffer,ADDRESS
	VAR	DOSWrite_length,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	DOSWrite
	move.L	DOSWrite_filehandle(A7),A0
	move.L	DOSWrite_buffer(A7),A1
	move.L	DOSWrite_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	DOSWrite
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	ErrorMsg_code,LONGINT
	VAR	ErrorMsg_ss,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	ErrorMsg
	move.L	ErrorMsg_code(A7),D0
	move.L	RexxSysBase(PC),A6
	CALL	ErrorMsg
	move.L	ErrorMsg_ss(A7),A1
	move.L	A0,(A1)			; ss := A0
	neg.B	D0			; (-1 --> 1), (0 --> 0)
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	ExistF_filename,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	ExistF
	move.L	RexxSysBase(PC),A6
	CALL	ExistF
	neg.B	D0			; (-1 --> 1), (0 --> 0)
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,10
	VAR	FillRexxMsg_msgptr,POINTER
	VAR	FillRexxMsg_count,LONGCARD
	VAR	FillRexxMsg_mask,BITSET
	END_PARAMETER_LIST

	PROCEDURE_CODE	FillRexxMsg
	move.L	FillRexxMsg_msgptr(A7),A0
	move.L	FillRexxMsg_count(A7),D0
	moveq	#0,D1
	move.W	FillRexxMsg_mask(A7),D1
	move.L	RexxSysBase(PC),A6
	CALL	FillRexxMsg
	neg.B	D0			; (-1 --> 1), (0 --> 0)
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	FindDevice_devicename,ADDRESS
	VAR	FindDevice_type,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	FindDevice
	move.L	FindDevice_devicename(A7),A0
	move.L	FindDevice_type(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	FindDevice
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,10
	VAR	FindRsrcNode_list,POINTER
	VAR	FindRsrcNode_name,ADDRESS
	VAR	FindRsrcNode_type,BYTE
	END_PARAMETER_LIST

	PROCEDURE_CODE	FindRsrcNode
	move.L	FindRsrcNode_list(A7),A0
	move.L	FindRsrcNode_name(A7),A1
	moveq	#0,D0
	move.B	FindRsrcNode_type(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	FindRsrcNode
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	FreePort_port,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	FreePort
	move.L	FreePort_port(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	FreePort
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	FreeSpace_envptr,ADDRESS
	VAR	FreeSpace_block,ADDRESS
	VAR	FreeSpace_length,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	FreeSpace
	move.L	FreeSpace_envptr(A7),A0
	move.L	FreeSpace_block(A7),A1
	move.L	FreeSpace_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	FreeSpace
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	GetSpace_envptr,ADDRESS
	VAR	GetSpace_length,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	GetSpace
	move.L	GetSpace_envptr(A7),A0
	move.L	GetSpace_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	GetSpace
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	InitList_list,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	InitList
	move.L	InitList_list(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	InitList
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	InitPort_port,POINTER
	VAR	InitPort_name,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	InitPort
	move.L	InitPort_port(A7),A0
	move.L	InitPort_name(A7),A1
	move.L	RexxSysBase(PC),A6
	JUMP	InitPort
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	IsRexxMsg_msgptr,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	IsRexxMsg
	move.L	IsRexxMsg_msgptr(A7),A0
	move.L	RexxSysBase(PC),A6
	CALL	IsRexxMsg
	neg.B	D0			; (-1 --> 1), (0 --> 0)
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	IsSymbol_string,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	IsSymbol
	move.L	IsSymbol_string(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	IsSymbol
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	LengthArgstring_argstring,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	LengthArgstring
	move.L	LengthArgstring_argstring(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	LengthArgstring
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,6
	VAR	ListNames_list,POINTER
	VAR	ListNames_seperator,CHAR
	END_PARAMETER_LIST

	PROCEDURE_CODE	ListNames
	move.L	ListNames_list(A7),A0
	move.B	ListNames_seperator(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	ListNames
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	LockRexxBase_resource,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	LockRexxBase
	move.L	LockRexxBase_resource(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	LockRexxBase
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	OpenF_list,POINTER
	VAR	OpenF_filename,ADDRESS
	VAR	OpenF_mode,LONGINT
	VAR	OpenF_logical,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	OpenF
	move.L	OpenF_list(A7),A0
	move.L	OpenF_filename(A7),A1
	move.L	OpenF_mode(A7),D0
	move.L	OpenF_logical(A7),D1
	move.L	RexxSysBase(PC),A6
	JUMP	OpenF
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	OpenPublicPort_list,POINTER
	VAR	OpenPublicPort_name,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	OpenPublicPort
	move.L	OpenPublicPort_list(A7),A0
	move.L	OpenPublicPort_name(A7),A1
	move.L	RexxSysBase(PC),A6
	JUMP	OpenPublicPort
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	QueueF_ioBuff,POINTER
	VAR	QueueF_buffer,ADDRESS
	VAR	QueueF_length,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	QueueF
	move.L	QueueF_ioBuff(A7),A0
	move.L	QueueF_buffer(A7),A1
	move.L	QueueF_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	QueueF
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	ReadF_ioBuff,POINTER
	VAR	ReadF_buffer,ADDRESS
	VAR	ReadF_length,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	ReadF
	move.L	ReadF_ioBuff(A7),A0
	move.L	ReadF_buffer(A7),A1
	move.L	ReadF_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	ReadF
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,16
	VAR	ReadStr_ioBuff,POINTER
	VAR	ReadStr_buffer,ADDRESS
	VAR	ReadStr_length,LONGINT
	VAR	ReadStr_pointer,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	ReadStr
	move.L	ReadStr_ioBuff(A7),A0
	move.L	ReadStr_buffer(A7),A1
	move.L	ReadStr_length(A7),D0
	move.L	RexxSysBase(PC),A6
	CALL	ReadStr
	move.L	ReadStr_pointer(A7),A0
	move.L	A1,(A0)			; pointer := A1
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	RemClipNode_node,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	RemClipNode
	move.L	RemClipNode_node(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	RemClipNode
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	RemRsrcList_list,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	RemRsrcList
	move.L	RemRsrcList_list(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	RemRsrcList
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	RemRsrcNode_node,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	RemRsrcNode
	move.L	RemRsrcNode_node(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	RemRsrcNode
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	SeekF_ioBuff,POINTER
	VAR	SeekF_offset,LONGINT
	VAR	SeekF_anchor,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	SeekF
	move.L	SeekF_ioBuff(A7),A0
	move.L	SeekF_offset(A7),D0
	move.L	SeekF_anchor(A7),D1
	move.L	RexxSysBase(PC),A6
	JUMP	SeekF
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	StackF_ioBuff,POINTER
	VAR	StackF_buffer,ADDRESS
	VAR	StackF_length,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	StackF
	move.L	StackF_ioBuff(A7),A0
	move.L	StackF_buffer(A7),A1
	move.L	StackF_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	StackF
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,20
	VAR	StcToken_string,ADDRESS
	VAR	StcToken_quote,POINTER
	VAR	StcToken_length,POINTER
	VAR	StcToken_scan,POINTER
	VAR	StcToken_token,POINTER
	END_PARAMETER_LIST

	PROCEDURE_CODE	StcToken
	move.L	StcToken_string(A7),A0
	move.L	RexxSysBase(PC),A6
	CALL	StcToken
	move.L	StcToken_quote(A7),A2
	move.B	D0,(A2)			; quote := D0
	move.L	StcToken_length(A7),A2
	move.L	D1,(A2)			; length := D1
	move.L	StcToken_scan(A7),A2
	move.L	A0,(A2)			; scan := A0
	move.L	StcToken_token(A7),A2
	move.L	A1,(A2)			; token := A1
	RETURN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,10
	VAR	StrcpyA_destination,ADDRESS
	VAR	StrcpyA_source,ADDRESS
	VAR	StrcpyA_length,CARDINAL
	END_PARAMETER_LIST

	PROCEDURE_CODE	StrcpyA
	move.L	StrcpyA_destination(A7),A0
	move.L	StrcpyA_source(A7),A1
	move.W	StrcpyA_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	StrcpyA
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,10
	VAR	StrcpyN_destination,ADDRESS
	VAR	StrcpyN_source,ADDRESS
	VAR	StrcpyN_length,CARDINAL
	END_PARAMETER_LIST

	PROCEDURE_CODE	StrcpyN
	move.L	StrcpyN_destination(A7),A0
	move.L	StrcpyN_source(A7),A1
	move.W	StrcpyN_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	StrcpyN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,10
	VAR	StrcpyU_destination,ADDRESS
	VAR	StrcpyU_source,ADDRESS
	VAR	StrcpyU_length,CARDINAL
	END_PARAMETER_LIST

	PROCEDURE_CODE	StrcpyU
	move.L	StrcpyU_destination(A7),A0
	move.L	StrcpyU_source(A7),A1
	move.W	StrcpyU_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	StrcpyU
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,8
	VAR	StrflipN_string,ADDRESS
	VAR	StrflipN_length,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	StrflipN
	move.L	StrflipN_string(A7),A0
	move.L	StrflipN_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	StrflipN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	Strlen_string,ADDRESS
	END_PARAMETER_LIST

	PROCEDURE_CODE	Strlen
	move.L	Strlen_string(A7),A0
	move.L	RexxSysBase(PC),A6
	JUMP	Strlen
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,10
	VAR	StrcmpN_string1,ADDRESS
	VAR	StrcmpN_string2,ADDRESS
	VAR	StrcmpN_length,CARDINAL
	END_PARAMETER_LIST

	PROCEDURE_CODE	StrcmpN
	move.L	StrcmpN_string1(A7),A0
	move.L	StrcmpN_string2(A7),A1
	move.W	StrcmpN_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	StrcmpN
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,2
	VAR	ToUpper_character,CHAR
	END_PARAMETER_LIST

	PROCEDURE_CODE	ToUpper
	moveq	#0,D0
	move.B	ToUpper_character(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	ToUpper
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,4
	VAR	UnlockRexxBase_resource,LONGCARD
	END_PARAMETER_LIST

	PROCEDURE_CODE	UnlockRexxBase
	move.L	UnlockRexxBase_resource(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	UnlockRexxBase
;---------------------------------------------------------------------------
	PARAMETER_LIST	4,12
	VAR	WriteF_ioBuff,POINTER
	VAR	WriteF_buffer,ADDRESS
	VAR	WriteF_length,LONGINT
	END_PARAMETER_LIST

	PROCEDURE_CODE	WriteF
	move.L	WriteF_ioBuff(A7),A0
	move.L	WriteF_buffer(A7),A1
	move.L	WriteF_length(A7),D0
	move.L	RexxSysBase(PC),A6
	JUMP	WriteF
;---------------------------------------------------------------------------

	END_CODE

	END

