This section deals with passing atoms in canonical form, that is, as unsigned integers.
Prolog: +atom C: QP_atom x; Pascal: x: integer FORTRAN: integer x
The argument must be instantiated to an atom, otherwise the call will
signal an error.
An unsigned integer representing the Prolog atom is passed to the
foreign function. Atoms can be converted to strings through the
functions QP_string_from_atom()
or QP_padded_string_from_atom()
(see fli-p2f-atm-a2s).
Prolog: -atom C: QP_atom *x *x = ... Pascal: var x: integer x := ... FORTRAN: integer x x = ...
A pointer to an unsigned integer is passed to the function. It is
assumed that the function will overwrite this unsigned integer with
its result. This result should be a canonical
representation of an atom already obtained from Prolog, or one
generated through the function QP_atom_from_string()
or the function
QP_atom_from_padded_string()
(see
fli-p2f-atm-a2s). Returning an
arbitrary integer will have undefined results. When the foreign
function returns, the atom represented by the unsigned integer
being pointed to is unified with the corresponding argument of the Prolog
call. The argument can be of any type; if it cannot be unified
with the returned atom, the call fails. If the foreign
function does not overwrite the unsigned integer, the result
is undefined.
Prolog: [-atom] C: QP_atom f(...) { QP_atom x; return x; } Pascal: function f(...): integer; var x: integer; begin f = x; end FORTRAN: integer function f(...) integer x f = x end
No argument is passed to the foreign function. The return value from
the function is assumed to be an unsigned integer, which should be a
canonical representation of an atom already obtained from Prolog, or one
generated by one of the functions QP_atom_from_string()
or
QP_atom_from_padded_string()
(see
fli-p2f-atm-a2s). Returning an
arbitrary integer will have undefined results. The atom represented
by the unsigned integer is unified with the corresponding argument of
the Prolog call. The argument can be of any type; if it cannot be
unified with the returned atom, the call fails.