[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / tutorial / 83_external_libraries.pir
blob8842adf039505fd784e1c526cbf2c65d127f4a61
1 # Copyright (C) 2007-2009, Parrot Foundation.
2 # $Id$
4 =head1 External C Function Call
6 There is a vast wealth of libraries written for a variety of tasks, and
7 Parrot can tap into most of them using an interface called NCI. NCI
8 allows Parrot to make calls to low-level compiled functions from
9 pre-compiled libraries.
11 The C<loadlib> opcode loads in a compiled library as a Library PMC. The
12 C<dlfunc> opcode takes a reference to that library PMC and the name of
13 a function and returns an NCI subroutine PMC that can be invoked
14 like a normal Parrot subroutine.
16 =cut
18 .sub main :main
19   .local pmc library
20   library = loadlib "libnci_test"
21   unless library goto NOT_LOADED
23   # calling a function in the library
24   .local pmc function
25   dlfunc function, library, "nci_c", "c"
27   ( $I0 ) = function()
28   print $I0
29   print "\n"
30   end
32 NOT_LOADED:
33     say "not loaded"
34 .end
36 # Local Variables:
37 #   mode: pir
38 #   fill-column: 100
39 # End:
40 # vim: expandtab shiftwidth=4 ft=pir: