123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886 |
- {
- $Id$
- Copyright (c) 1989, 1991 IBM Corporation
- Copyright (c) 2003 by Yuri Prokushev ([email protected]).
- 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 ([email protected]))
- @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
- }
|