Avaya Logo

Previous Topic

Next Topic

Book Contents

Book Index

Sample external function

The following is an example of an external function.

/*

* FUNCTION: parse - break a field into smaller fields
* This function breaks a field
into two smaller subfields; the
*
source field is considered to consist of two subfields separated
* by one or more separator characters.
The first subfield is then
* copied to
destination; the separators are skipped up to the first
* non-separator,
and the remaining characters are move up to the
* start of the
source field. (That is, the source field is changed
* by this
function.)
* NOTE: a sequence of
separator characters will be skipped over
* as a unit, rather than
each occurrence denoting a null token.
*
* INPUT:
* destination:
field where first subfield is placed.
* source: original field to be
broken up.
* separators: field
containing separator characters.
* RETURN
CODE: number of characters copied in destination field.
* EXAMPLE:
*
If source contains "Wilmington, Ohio" and separators
* are
", .", then "Wilmington" will be placed in the destination,
* "Ohio" will
be left in source, and the return code will contain
* the number
10.
*/

DEFARG_COUNT(3)
DEFARG(destination,char,out
)
DEFARG(source,char,both)
DEFARG(separators,
char,in)
L_ _parse:
load (r.0, r.2)
L_
_parse1:
load (r.1, int.F_ _FUNCT_ARG3)
L_
_parse2:
jmp (*ch.0 == *ch.1, L_
_parse4) /* match */
incr (r.1,
im.1)
jmp (*ch.1 != im.0, L_ _parse2)

incr (r.0, im.1)
jmp (*ch.0 !=
im.0, L_ _parse1)
/* end of src
string, return it as dst1, null as dst2. */
strcpy (*ch.3,
*ch.2)
L_ _parse3:
load (*ch.2,
im.0)
strlen (*ch.3)
rts
()
L_
_parse4: /* copy substrings to out area. */
load (*ch.0, im.0) /* null
terminate 1st dst string. */
strcpy
(*ch.3, *ch.2)
/* skip over
separator characters. */
L_
_parse5:
incr (r.0, im.1)
load (r.1,
int.F_ _FUNCT_ARG3)
L_
_parse6:
jmp (*ch.0 == *ch.1, L_ _parse5)
/* separator. */
incr (r.1,
im.1)
jmp (*ch.1 != im.0, L_
_parse6)
/* at end of separators.
*/
jmp (*ch.0 == im.0, L_ _parse3)
/* separators end the
string*/
L_ _parse7:
/* copy
remaining string to dst2. */
strcpy (*ch.2, *ch.0)
/* look out for
overlapping copy,OK on 6386*/

strlen (*ch.3)
rts ()

© 2004 Avaya Inc. All Rights Reserved.