TIBCO Object Service Broker executes as an assembler environment; you must write and link your program so it can be called by an assembler program using standard conventions as outlined below.
|
Assembler Storage Requirements
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The following external routine returns the number of occurrences of a specified character in a given string. The routine requires three arguments:
STRING,
CHAR, and
FOLD. It returns a value through
COUNT. The routine and its arguments must be identified to TIBCO Object Service Broker as described in
Identifying Your External Routine to TIBCO Object Service Broker.
* CHRINSTR(STRING,CHAR,FOLD) *
* RETURNS THE NUMBER OF OCCURRENCES IN STRING OF THE SINGLE *
* IF FOLD IS 'Y' IGNORE CASE-SENSITIVITY; *
RCOUNT DS A ADDRESS OF RETURNED COUNT
PSTRING DS A ADDRESS OF INPUT STRING
PCHAR DS A ADDRESS OF INPUT CHAR
PFOLD DS A ADDRESS OF INPUT FOLD
* ESTABLISH ADDRESSABILITY
STM R14,R12,12(R13) SAVE CALLER'S REGISTERS
LR R12,R15 CSECT BASE REGISTER
LR R11,R1 ARGUMENT BASE REGISTER
* LOAD THE INPUT STRING AND CHARACTER
L R2,PSTRING POINT TO STRING ARGUMENT
LA R2,2(,R2) SKIP PREFIX LENGTH
BZ RETURN YES, RETURN RESULT
L R5,PCHAR POINT TO CHAR ARGUMENT
LA R5,2(,R5) SKIP PREFIX LENGTH
L R6,PFOLD POINT TO FOLD ARGUMENT
CLI 0(R6),C'Y' SHOULD WE FOLD?
* CODE TO IGNORE DIFFERENCE OF CASE IF FOLD IS 'Y' CAN BE PUT HERE
* MAIN LOOP: PROCESS ONE CHARACTER AT A TIME
CLC 0(1,R2),0(R5) CURRENT CHAR MATCH?
BNE NEXTCHAR NO, CONTINUE
LA R4,1(,R4) ELSE, INCREMENT COUNTER
LA R2,1(,R2) ADVANCE TO NEXT CHARACTER
BCT R3,LOOP LOOP IF NOT END OF STRING
* COPY RESULT TO RETURN AREA
L R2,RCOUNT POINT TO RESULT AREA
CVD R4,PRESULT CONVERT RESULT TO DECIMAL
ZAP 0(4,R2),PRESULT+4(4) COPY TO RESULT AREA
LM R14,R12,12(R13) RESTORE CALLER'S REGISTERS
XR R15,R15 ZERO RETURN CODE
DS 0D ALIGN ON DOUBLE-WORD BOUNDARY
COPY REGEQU REGISTER DEFINITIONS