fpc/packages/extra/rexx/rexxsaa.pp

887 lines
34 KiB
ObjectPascal

{
$Id$
Copyright (c) 1989, 1991 IBM Corporation
Copyright (c) 2003 by Yuri Prokushev (prokushev@freemail.ru).
REXX SAA Interface
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License (LGPL) as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. This program is
distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Library General Public License for more details. You should
have received a copy of the GNU Library General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**********************************************************************}
{
@abstract(REXX SAA interface)
@author(Yuri Prokushev (prokushev@freemail.ru))
@created(01 Feb 2003)
@lastmod(13 Feb 2003)
REXX SAA Interface
Warning: This code is alfa. Future versions of this unit will propably
not be compatible.
}
(*********************************************************************
*
* REXX SAA Interface
*
*********************************************************************)
Unit RexxSAA;
Interface
{$Mode ObjFpc}
Const
{$IFDEF OS2}
REXX='REXX';
REXXAPI='REXXAPI';
{$ELSE}
{$IFDEF UNIX}
REXX='libregina';
REXXAPI='libregina';
{$ELSE}
REXX='REGINA';
REXXAPI='REGINA';
{$ENDIF}
{$ENDIF}
//********************************************************************
// *
// Common *
// *
//********************************************************************
//* This section defines return codes and constants that are the */
//* same for both 16-bit and 32-bit REXX calls. */
//Structure for external interface string (RXSTRING)
Type
RxString=record
StrLength: Cardinal; // Length of string
StrPtr: PChar; // Pointer to a string
end;
PRxString=^RxString; // pointer to a RXSTRING
Const
RxAutoBufLen=256;
Type
PFN=Pointer;
//Structure for system exit block (RXSYSEXIT) 32-bit
Type
RxSysExit=record
sysexit_name: PChar; // subcom enviro for sysexit
sysexit_code: Longint; // sysexit function code
end;
PRxSysExit=^RxSysExit; // pointer to a RXSYSEXIT
// Macros for RXSTRING manipulation
Function RXNULLSTRING(CONST r:RXSTRING):BOOLEAN;
Function RXZEROLENSTRING(CONST r:RXSTRING):BOOLEAN;
Function RXVALIDSTRING(CONST r:RXSTRING):BOOLEAN;
Function RXSTRLEN(CONST r:RXSTRING):LONGINT;
Function RXSTRPTR(CONST r:RXSTRING):PChar;
Procedure MAKERXSTRING(VAR r:RXSTRING;p:PChar;l:LONGINT);
//Call type codes for use on interpreter startup
Const
RxCommand=0; // Program called as Command
RxSubroutine=1; // Program called as Subroutin
RxFunction=2; // Program called as Function
// Subcommand Interface defines
// Drop Authority for RXSUBCOM interface
Const
RxSubCom_Droppable=$00; // handler to be dropped by all
RxSubCom_Nondrop=$01; // process with same PID as the
// registrant may drop environ
// Return Codes from RXSUBCOM interface
Const
RXSUBCOM_ISREG = $01; // Subcommand is registered
RXSUBCOM_ERROR = $01; // Subcommand Ended in Error
RXSUBCOM_FAILURE = $02; // Subcommand Ended in Failure
RXSUBCOM_BADENTRY = 1001; // Invalid Entry Conditions
RXSUBCOM_NOEMEM = 1002; // Insuff stor to complete req
RXSUBCOM_BADTYPE = 1003; // Bad registration type.
RXSUBCOM_NOTINIT = 1004; // API system not initialized.
RXSUBCOM_OK = 0; // Function Complete
RXSUBCOM_DUP = 10; // Duplicate Environment Name-
// but Registration Completed
RXSUBCOM_MAXREG = 20; // Cannot register more
// handlers
RXSUBCOM_NOTREG = 30; // Name Not Registered
RXSUBCOM_NOCANDROP = 40; // Name not droppable
RXSUBCOM_LOADERR = 50; // Could not load function
RXSUBCOM_NOPROC =127; // RXSUBCOM routine - not found
// Shared Variable Pool Interface defines
// Function Codes for Variable Pool Interface (shvcode)
Const
RXSHV_SET = $00; // Set var from given value
RXSHV_FETCH = $01; // Copy value of var to buffer
RXSHV_DROPV = $02; // Drop variable
RXSHV_SYSET = $03; // Symbolic name Set variable
RXSHV_SYFET = $04; // Symbolic name Fetch variable
RXSHV_SYDRO = $05; // Symbolic name Drop variable
RXSHV_NEXTV = $06; // Fetch "next" variable
RXSHV_PRIV = $07; // Fetch private information
RXSHV_EXIT = $08; // Set function exit value
// Return Codes for Variable Pool Interface
Const
RXSHV_NOAVL = 144; // Interface not available
// Return Code Flags for Variable Pool Interface (shvret)
Const
RXSHV_OK = $00; // Execution was OK
RXSHV_NEWV = $01; // Variable did not exist
RXSHV_LVAR = $02; // Last var trans via SHVNEXTV
RXSHV_TRUNC = $04; // Truncation occurred-Fetch
RXSHV_BADN = $08; // Invalid variable name
RXSHV_MEMFL = $10; // Out of memory failure
RXSHV_BADF = $80; // Invalid funct code (shvcode)
// Structure of Shared Variable Request Block (SHVBLOCK)
Type
PSHVBLOCK=^SHVBLOCK;
SHVBLOCK=record
shvnext: PSHVBLOCK; // pointer to the next block
shvname: RxString; // Pointer to the name buffer
shvvalue: RxString; // Pointer to the value buffer
shvnamelen: Cardinal; // Length of the name value
shvvaluelen: Cardinal; // Length of the fetch value
shvcode: Byte; // Function code for this block
shvret: Byte; // Individual Return Code Flags
end;
// External Function Interface
// Registration Type Identifiers for Available Function Table
Const
RXFUNC_DYNALINK=1; // Function Available in DLL
RXFUNC_CALLENTRY=2; // Registered as mem entry pt.
// Return Codes from RxFunction interface
Const
RXFUNC_OK = 0; // REXX-API Call Successful
RXFUNC_DEFINED = 10; // Function Defined in AFT
RXFUNC_NOMEM = 20; // Not Enough Mem to Add
RXFUNC_NOTREG = 30; // Funct Not Registered in AFT
RXFUNC_MODNOTFND = 40; // Funct Dll Module Not Found
RXFUNC_ENTNOTFND = 50; // Funct Entry Point Not Found
RXFUNC_NOTINIT = 60; // API not initialized
RXFUNC_BADTYPE = 70; // Bad function type
// System Exits defines
// Drop Authority for Rexx Exit interface
Const
RXEXIT_DROPPABLE = $00; // handler to be dropped by all
RXEXIT_NONDROP = $01; // process with same PID as the
// registrant may drop environ
// Exit return actions
Const
RXEXIT_HANDLED = 0; // Exit handled exit event
RXEXIT_NOT_HANDLED = 1; // Exit passes on exit event
RXEXIT_RAISE_ERROR =-1; // Exit handler error occurred
// Return Codes from RXEXIT interface
Const
RXEXIT_ISREG = $01; // Exit is registered
RXEXIT_ERROR = $01; // Exit Ended in Error
RXEXIT_FAILURE = $02; // Exit Ended in Failure
RXEXIT_BADENTRY = 1001; // Invalid Entry Conditions
RXEXIT_NOEMEM = 1002; // Insuff stor to complete req
RXEXIT_BADTYPE = 1003; // Bad registration type.
RXEXIT_NOTINIT = 1004; // API system not initialized.
RXEXIT_OK = 0; // Function Complete
RXEXIT_DUP = 10; // Duplicate Exit Name-
// but Registration Completed
RXEXIT_MAXREG = 20; // Cannot register more
// handlers
RXEXIT_NOTREG = 30; // Name Not Registered
RXEXIT_NOCANDROP = 40; // Name not droppable
RXEXIT_LOADERR = 50; // Could not load function
RXEXIT_NOPROC = 127; // RXEXIT routine - not found
// System Exit function and sub-function definitions
Const
RXENDLST = 0; // End of exit list.
RXFNC = 2; // Process external functions.
RXFNCCAL = 1; // subcode value.
RXCMD = 3; // Process host commands.
RXCMDHST = 1; // subcode value.
RXMSQ = 4; // Manipulate queue.
RXMSQPLL = 1; // Pull a line from queue
RXMSQPSH = 2; // Place a line on queue
RXMSQSIZ = 3; // Return num of lines on queue
RXMSQNAM = 20; // Set active queue name
RXSIO = 5; // Session I/O.
RXSIOSAY = 1; // SAY a line to STDOUT
RXSIOTRC = 2; // Trace output
RXSIOTRD = 3; // Read from char stream
RXSIODTR = 4; // DEBUG read from char stream
RXSIOTLL = 5; // Return linelength(N/A OS/2)
RXHLT = 7; // Halt processing.
RXHLTCLR = 1; // Clear HALT indicator
RXHLTTST = 2; // Test HALT indicator
RXTRC = 8; // Test ext trace indicator.
RXTRCTST = 1; // subcode value.
RXINI = 9; // Initialization processing.
RXINIEXT = 1; // subcode value.
RXTER = 10; // Termination processing.
RXTEREXT = 1; // subcode value.
RXNOOFEXITS = 11; // 1 + largest exit number.
Type
PEXIT=^Byte; // ptr to exit parameter block
// Asynchronous Request Interface defines
// Return Codes from Asynchronous Request interface
Const
RXARI_OK = 0; // Interface completed
RXARI_NOT_FOUND = 1; // Target program not found
RXARI_PROCESSING_ERROR = 2; // Error processing request
// Macro Space Interface defines
// Registration Search Order Flags
Const
RXMACRO_SEARCH_BEFORE = 1; // Beginning of search order
RXMACRO_SEARCH_AFTER = 2; // End of search order
// Return Codes from RxMacroSpace interface
Const
RXMACRO_OK = 0; // Macro interface completed
RXMACRO_NO_STORAGE = 1; // Not Enough Storage Available
RXMACRO_NOT_FOUND = 2; // Requested function not found
RXMACRO_EXTENSION_REQUIRED= 3; // File ext required for save
RXMACRO_ALREADY_EXISTS = 4; // Macro functions exist
RXMACRO_FILE_ERROR = 5; // File I/O error in save/load
RXMACRO_SIGNATURE_ERROR = 6; // Incorrect format for load
RXMACRO_SOURCE_NOT_FOUND = 7; // Requested cannot be found
RXMACRO_INVALID_POSITION = 8; // Invalid search order pos
RXMACRO_NOT_INIT = 9; // API not initialized
//*********************************************************************/
//* */
//* 32-bit */
//* */
//*********************************************************************/
// Main Entry Point to the REXXSAA Interpreter
Function RexxStart(ArgC: Longint; // Num of args passed to rexx
ArgV: PRXSTRING; // Array of args passed to rex
Filename: PChar; // [d:][path] filename[.ext]
Proc: PRXSTRING; // Loc of rexx proc in memory
Env: PChar; // ASCIIZ initial environment.
rType: Longint; // type (command,subrtn,funct)
Exit_: PRXSYSEXIT; // SysExit env. names & codes
Ret: PInteger; // Ret code from if numeric
RetVal: PRXSTRING): Longint; cdecl; // Retvalue from the rexx proc
Function RexxStart(ArgC: Longint; // Num of args passed to rexx
ArgV: PRXSTRING; // Array of args passed to rex
Filename: PChar; // [d:][path] filename[.ext]
Proc: PRXSTRING; // Loc of rexx proc in memory
Env: PChar; // ASCIIZ initial environment.
rType: Longint; // type (command,subrtn,funct)
Exit_: PRXSYSEXIT; // SysExit env. names & codes
var Ret: Integer; // Ret code from if numeric
var RetVal: RXSTRING): Longint; cdecl; // Retvalue from the rexx proc
// Subcommand Interface
// This type simplifies coding of a Subcommand handler.
Type
RexxSubcomHandler=function(a: PRXSTRING; b: PWord; c: PRXSTRING): Cardinal; cdecl;
// RexxRegisterSubcomDll -- Register a DLL entry point
// as a Subcommand handler
Function RexxRegisterSubcomDll(
HName: PChar; // Name of subcom handler
DllName: PChar; // Name of DLL
ProcName: PChar; // Name of procedure in DLL
UserArea: PWord; // User area
Drop: Cardinal): Cardinal; cdecl; // Drop authority.
// RexxRegisterSubcomExe -- Register an EXE entry point
// as a Subcommand handler
Function RexxRegisterSubcomExe(
HName: PChar; // Name of subcom handler
HandlerAddr: PFn; // address of handler in EXE
UserArea: PWord): Cardinal; cdecl; // User area
// RexxQuerySubcom - Query an environment for Existance
Function RexxQuerySubcom(
EnvName: PChar; // Name of the Environment
DllName: PChar; // DLL Module Name
ExCode: PWord; // Stor for existance code
User: PWord): Cardinal; cdecl; // Stor for user word
Function RexxQuerySubcom(
EnvName: PChar; // Name of the Environment
DllName: PChar; // DLL Module Name
var ExCode: Word; // Stor for existance code
var User: Word): Cardinal; cdecl; // Stor for user word
// RexxDeregisterSubcom - Drop registration of a Subcommand
// environment
Function RexxDeregisterSubcom(
EnvName: PChar; // Name of the Environment
DllName: PChar): Cardinal; cdecl; // DLL Module Name
// Shared Variable Pool Interface
// RexxVariablePool - Request Variable Pool Service
Function RexxVariablePool(Pool: PShvBlock): Cardinal; cdecl;
Function RexxVariablePool(var Pool: ShvBlock): Cardinal; cdecl; // Pointer to list of SHVBLOCKs
// External Function Interface
// This typedef simplifies coding of an External Function.
Type
RexxFunctionHandler=Function(a: PByte;
b: Cardinal;
var c: RXSTRING;
d: PChar;
var e: RXSTRING): Cardinal; cdecl;
// RexxRegisterFunctionDll - Register a function in the AFT
Function RexxRegisterFunctionDll(
FnName: PChar; // Name of function to add
DllName: PChar; // Dll file name (if in dll)
Entry: PChar): Cardinal; cdecl; // Entry in dll
// RexxRegisterFunctionExe - Register a function in the AFT
Function RexxRegisterFunctionExe(
FnName: PChar; // Name of function to add
Entry: PFn): Cardinal; cdecl; // Entry point in EXE
// RexxDeregisterFunction - Delete a function from the AFT
Function RexxDeregisterFunction(FnName: PChar): Cardinal; cdecl; // Name of function to remove
// RexxQueryFunction - Scan the AFT for a function
Function RexxQueryFunction(FnName: PChar): Cardinal; cdecl; // Name of function to find
// System Exits
// Subfunction RXFNCCAL - External Function Calls
//rxfnc_flags flags
const
rxfferr = $01; // Invalid call to routine.
rxffnfnd = $02; // Function not found.
rxffsub = $04; // Called as a subroutine
type
RxFnCCal_Parm = record
rxfnc_flags: Byte; // function flags
rxfnc_name: PChar; // Pointer to function name.
rxfnc_namel: Word; // Length of function name.
rxfnc_que: PChar; // Current queue name.
rxfnc_quel: Word; // Length of queue name.
rxfnc_argc: Word; // Number of args in list.
rxfnc_argv: PRxString; // Pointer to argument list.
rxfnc_retc: RxString; // Return value.
end;
// Subfunction RXCMDHST -- Process Host Commands
// rxcmd_flags flags
const
rxfcfail = $01; // Command failed.
rxfcerr = $02; // Command ERROR occurred.
type
RxCmdHst_Parm = record
rxcmd_flags: Byte; // error/failure flags
rxcmd_address: PChar; // Pointer to address name.
rxcmd_addressl: Word; // Length of address name.
rxcmd_dll: PChar; // dll name for command.
rxcmd_dll_len: Word; // Length of dll name.
rxcmd_command: RxString; // The command string.
rxcmd_retc: RxString; // Pointer to return buffer
end;
// Subfunction RXMSQPLL -- Pull Entry from Queue
RxMsqPll_Parm = record
rxmsq_retc: RxString; // Pointer to dequeued entry
end; // buffer. User allocated.
// Subfunction RXMSQPSH -- Push Entry on Queue
// rxmsq_flags flags
const
rxfmlifo = $01; // Stack entry LIFO if set
type
RxMsqPsh_Parm = record
rxmsq_flags: Byte; // LIFO/FIFO flag
rxmsq_value: RxString // The entry to be pushed.
end;
// Subfunction RXMSQSIZ -- Return the Current Queue Size
Type
RxMsqSiz_Parm = record
rxmsq_size: Cardinal; // Number of Lines in Queue
end;
// Subfunction RXMSQNAM -- Set Current Queue Name
Type
RxMsqNam_Parm = record
rxmsq_name: RxString; // RxString containing
end; // queue name.
// Subfunction RXSIOSAY -- Perform SAY Clause
Type
RxSioSay_Parm = record
rxsio_string: RxString; // String to display.
end;
// Subfunction RXSIOTRC -- Write Trace Output
Type
RxSioTrc_Parm = record
rxsio_string: RxString; // Trace line to display.
end;
// Subfunction RXSIOTRD -- Read Input from the Terminal
Type
RxSioTrd_Parm = record
rxsiotrd_retc: RxString; // RxString for output.
end;
// Subfunction RXSIODTR -- Read Debug Input from the Terminal
Type
RxSioDtr_Parm = record
rxsiodtr_retc: RxString; // RxString for output.
end;
// Subfunction RXHSTTST -- Test for HALT Condition
// rxhlt_flags flags
const
rxfhhalt = $01; // Set if HALT occurred.
type
RxHltTst_Parm = record
rxhlt_flags: Byte; // Set if HALT occurred
end;
// Subfunction RXTRCTST -- Test for TRACE Condition
// rxtrc_flags flags
const
rxftrace = $01; // Set to run external trace.
type
RxTrcTst_Parm = record
rxtrc_flags: Byte; // Set to run external trace
end;
// This typedef simplifies coding of an Exit handler.
Type
RexxExitHandler=function(A: Longint;
B: Longint;
C: PEXIT): Cardinal; cdecl;
// RexxRegisterExitDll - Register a system exit.
Function RexxRegisterExitDll(
HExit: PChar; // Name of the exit handler
DllName: PChar; // Name of the DLL
ProcName: PChar; // Name of the procedure
UserArea: PByte; // User area
Drop: Cardinal): Cardinal; cdecl; // Drop authority
// RexxRegisterExitExe - Register a system exit.
Function RexxRegisterExitExe(
HExit: PChar; // Name of the exit handler
HandlerAddr: PFn; // Address of exit handler
UserArea: PByte): Cardinal; cdecl; // User area
// RexxDeregisterExit - Drop registration of a system exit.
Function RexxDeregisterExit(
ExitName: PChar; // Exit name
DllName: PChar): Cardinal; cdecl; // DLL module name
// RexxQueryExit - Query an exit for existance.
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
var ExFlag: Word; // Existance flag.
UserArea: Pointer): Cardinal; cdecl; // User data.
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
var ExFlag: Word; // Existance flag.
UserArea: PByte): Cardinal; cdecl; // User data.
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
ExFlag: PWord; // Existance flag.
UserArea: PByte): Cardinal; cdecl; // User data.
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
ExFlag: PWord; // Existance flag.
UserArea: Pointer): Cardinal; cdecl; // User data.
// Asynchronous Request Interface
// RexxSetHalt - Request Program Halt
Function RexxSetHalt(
Pid: Longint; // Process Id
Tid: Longint): Cardinal; cdecl; // Thread Id
// RexxSetTrace - Request Program Trace
Function RexxSetTrace(
Pid: Longint; // Process Id
Tid: Longint): Cardinal; cdecl; // Thread Id
// RexxResetTrace - Turn Off Program Trace
Function RexxResetTrace(
Pid: Longint; // Process Id
Tid: Longint): Cardinal; cdecl; // Thread Id
// Macro Space Interface
// RexxAddMacro - Register a function in the Macro Space
Function RexxAddMacro(
FnName: PChar; // Function to add or change
FileName: PChar; // Name of file to get function
SrchPos: Cardinal): Cardinal; cdecl; // Flag indicating search pos
// RexxDropMacro - Remove a function from the Macro Space
Function RexxDropMacro(FnName: PChar): Cardinal; cdecl; // Name of function to remove
// RexxSaveMacroSpace - Save Macro Space functions to a file
Function RexxSaveMacroSpace(
ArgC: Cardinal; // Argument count (0==save all)
var NameLst: PChar; // List of funct names to save
FileName: PChar): Cardinal; cdecl; // File to save functions in
// RexxLoadMacroSpace - Load Macro Space functions from a file
Function RexxLoadMacroSpace(
ArgC: Cardinal; // Argument count (0==load all)
var NameLst: PChar; // List of funct names to load
FileName: PChar): Cardinal; cdecl; // File to load functions from
// RexxQueryMacro - Find a function's search-order position
Function RexxQueryMacro(
FnName: PChar; // Function to search for
var PtrPos: Word): Cardinal; cdecl; // Ptr for position flag return
// RexxReorderMacro - Change a function's search-order
// position
Function RexxReorderMacro(
FnName: PChar; // Name of funct change order
NewPos: Cardinal): Cardinal; cdecl; // New position for function
// RexxClearMacroSpace - Remove all functions from a MacroSpace
Function RexxClearMacroSpace: Cardinal; cdecl; // No Arguments.
(* Not supported yet!!
/* REGINA EXTENSIONS *********************************************************/
/* The following function is an extension to the standard. Never try to
* address the function directly. Use the dynamic linking machanism of
* your operating system instead. This function was introduced in version
* 2.0.
* Returns: ULONG, in lower byte the two-digit fraction part of the version.
* The higher bytes will hold the integer part of the version.
* Examples: 0x10A codes the Version "1.10".
* VersionString will be filled if VersionString is non-NULL.
* If VersionString is non-NULL then there are two possibilities:
* a) VersionString->strlength == 0: VersionString is filled with the
* appropriate values. VersionString->strptr
* is always created.
* b) VersionString->strlength != 0: VersionString->strptr is filled up to
* this value. VersionString->strlength will
* hold the copied bytes.
* Note: A terminating ASCII-zero is appended if there is enough space
* although it is never counted in VersionString.strlength.
* RexxAllocateMemory is used if needed.
*/
*)
{
Type
ReginaVersion=Function(var VersionString: RxString);
}
Implementation
Function RexxStart(ArgC: Longint; // Num of args passed to rexx
ArgV: PRXSTRING; // Array of args passed to rex
Filename: PChar; // [d:][path] filename[.ext]
Proc: PRXSTRING; // Loc of rexx proc in memory
Env: PChar; // ASCIIZ initial environment.
rType: Longint; // type (command,subrtn,funct)
Exit_: PRXSYSEXIT; // SysExit env. names & codes
Ret: PInteger; // Ret code from if numeric
RetVal: PRXSTRING): Longint; cdecl; // Retvalue from the rexx proc
external REXX name 'RexxStart';
Function RexxStart(ArgC: Longint; // Num of args passed to rexx
ArgV: PRXSTRING; // Array of args passed to rex
Filename: PChar; // [d:][path] filename[.ext]
Proc: PRXSTRING; // Loc of rexx proc in memory
Env: PChar; // ASCIIZ initial environment.
rType: Longint; // type (command,subrtn,funct)
Exit_: PRXSYSEXIT; // SysExit env. names & codes
var Ret: integer; // Ret code from if numeric
var RetVal: RXSTRING): Longint; cdecl; // Retvalue from the rexx proc
external REXX name 'RexxStart';
Function RexxRegisterSubcomDll(
HName: PChar; // Name of subcom handler
DllName: PChar; // Name of DLL
ProcName: PChar; // Name of procedure in DLL
UserArea: PWord; // User area
Drop: Cardinal): Cardinal; cdecl; // Drop authority.
external REXXAPI name 'RexxRegisterSubcomDll';
Function RexxRegisterSubcomExe(
HName: PChar; // Name of subcom handler
HandlerAddr: PFn; // address of handler in EXE
UserArea: PWord): Cardinal; cdecl; // User area
external REXXAPI name 'RexxRegisterSubcomExe';
Function RexxQuerySubcom(
EnvName: PChar; // Name of the Environment
DllName: PChar; // DLL Module Name
ExCode: PWord; // Stor for existance code
User: PWord): Cardinal; cdecl; // Stor for user word
external REXXAPI name 'RexxQuerySubcom';
Function RexxQuerySubcom(
EnvName: PChar; // Name of the Environment
DllName: PChar; // DLL Module Name
var ExCode: Word; // Stor for existance code
var User: Word): Cardinal; cdecl; // Stor for user word
external REXXAPI name 'RexxQuerySubcom';
Function RexxDeregisterSubcom(
EnvName: PChar; // Name of the Environment
DllName: PChar): Cardinal; cdecl; // DLL Module Name
external REXXAPI name 'RexxDeregisterSubcom';
Function RexxVariablePool(Pool: PShvBlock): Cardinal; cdecl;
external REXX name 'RexxVariablePool';
Function RexxVariablePool(var Pool: ShvBlock): Cardinal; cdecl; // Pointer to list of SHVBLOCKs
external REXX name 'RexxVariablePool';
Function RexxRegisterFunctionDll(
FnName: PChar; // Name of function to add
DllName: PChar; // Dll file name (if in dll)
Entry: PChar): Cardinal; cdecl; // Entry in dll
external REXXAPI name 'RexxRegisterFunctionDll';
Function RexxRegisterFunctionExe(
FnName: PChar; // Name of function to add
Entry: PFn): Cardinal; cdecl; // Entry point in EXE
external REXXAPI name 'RexxRegisterFunctionExe';
Function RexxDeregisterFunction(FnName: PChar): Cardinal; cdecl; // Name of function to remove
external REXXAPI name 'RexxDeregisterFunction';
Function RexxQueryFunction(FnName: PChar): Cardinal; cdecl; // Name of function to find
external REXXAPI name 'RexxQueryFunction';
Function RexxRegisterExitDll(
HExit: PChar; // Name of the exit handler
DllName: PChar; // Name of the DLL
ProcName: PChar; // Name of the procedure
UserArea: PByte; // User area
Drop: Cardinal): Cardinal; cdecl; // Drop authority
external REXXAPI name 'RexxRegisterExitDll';
Function RexxRegisterExitExe(
HExit: PChar; // Name of the exit handler
HandlerAddr: PFn; // Address of exit handler
UserArea: PByte): Cardinal; cdecl; // User area
external REXXAPI name 'RexxRegisterExitExe';
Function RexxDeregisterExit(
ExitName: PChar; // Exit name
DllName: PChar): Cardinal; cdecl; // DLL module name
external REXXAPI name 'RexxDeregisterExit';
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
var ExFlag: Word; // Existance flag.
UserArea: Pointer): Cardinal; cdecl; // User data.
external REXXAPI name 'RexxQueryExit';
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
var ExFlag: Word; // Existance flag.
UserArea: PByte): Cardinal; cdecl; // User data.
external REXXAPI name 'RexxQueryExit';
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
ExFlag: PWord; // Existance flag.
UserArea: PByte): Cardinal; cdecl; // User data.
external REXXAPI name 'RexxQueryExit';
Function RexxQueryExit(
ExitName: PChar; // Exit name
DllName: PChar; // DLL Module name.
ExFlag: PWord; // Existance flag.
UserArea: Pointer): Cardinal; cdecl; // User data.
external REXXAPI name 'RexxQueryExit';
Function RexxSetHalt(
Pid: Longint; // Process Id
Tid: Longint): Cardinal; cdecl; // Thread Id
external REXX name 'RexxSetHalt';
Function RexxSetTrace(
Pid: Longint; // Process Id
Tid: Longint): Cardinal; cdecl; // Thread Id
external REXX name 'RexxSetTrace';
Function RexxResetTrace(
Pid: Longint; // Process Id
Tid: Longint): Cardinal; cdecl; // Thread Id
external REXX name 'RexxResetTrace';
Function RexxAddMacro(
FnName: PChar; // Function to add or change
FileName: PChar; // Name of file to get function
SrchPos: Cardinal): Cardinal; cdecl; // Flag indicating search pos
external REXXAPI name 'RexxAddMacro';
Function RexxDropMacro(FnName: PChar): Cardinal; cdecl; // Name of function to remove
external REXXAPI name 'RexxDropMacro';
Function RexxSaveMacroSpace(
ArgC: Cardinal; // Argument count (0==save all)
var NameLst: PChar; // List of funct names to save
FileName: PChar): Cardinal; cdecl; // File to save functions in
external REXXAPI name 'RexxSaveMacroSpace';
Function RexxLoadMacroSpace(
ArgC: Cardinal; // Argument count (0==load all)
var NameLst: PChar; // List of funct names to load
FileName: PChar): Cardinal; cdecl; // File to load functions from
external REXXAPI name 'RexxLoadMacroSpace';
Function RexxQueryMacro(
FnName: PChar; // Function to search for
var PtrPos: Word): Cardinal; cdecl; // Ptr for position flag return
external REXXAPI name 'RexxQueryLoadMacro';
Function RexxReorderMacro(
FnName: PChar; // Name of funct change order
NewPos: Cardinal): Cardinal; cdecl; // New position for function
external REXXAPI name 'RexxReorderMacro';
Function RexxClearMacroSpace: Cardinal; cdecl; // No Arguments.
external REXXAPI name 'RexxClearMacroSpace';
Function RxNullString(const r: RxString): Boolean;
Begin
RxNullString:=r.strptr=nil;
End;
Function RxZeroLenString(const r: RxString): Boolean;
Begin
RxZeroLenString:=((r.strptr<>nil) and (r.strlength=0));
End;
Function RxValidString(const r: RxString): Boolean;
Begin
RxValidString:=((r.strptr<>nil) and (r.strlength>0));
End;
Function RxStrLen(const r: RxString): Longint;
Begin
If RxNullString(r) then
RxStrLen:=0
else
RxStrLen:=r.strlength;
End;
Function RxStrPtr(Const r: RxString): PChar;
Begin
RxStrPtr:=r.strptr;
End;
Procedure MakeRxString(Var r: RxString; p: PChar; l: Longint);
Begin
r.strptr:=p;
r.strlength:=l;
End;
End.
{
$Log$
Revision 1.3 2003-11-14 09:34:35 yuri
* Added missed part of integer x word fix
Revision 1.2 2003/11/07 20:43:23 hajny
* incorrect type (integer x word) fixed
Revision 1.1 2003/02/15 11:44:58 hajny
+ REXX SAA interface added
}