Use another language to call a function: Difference between revisions

Content added Content deleted
Line 761: Line 761:
-L"`ocamlc -where`" \
-L"`ocamlc -where`" \
-lm -ldl -lasmrun
-lm -ldl -lasmrun

=={{header|PARI/GP}}==

This is a Linux solution. Message "Here I am" is encrypted with ROT13: "Urer V nz".

ROT13() is implemented as a PARI one-line:<lang parigp>Strchr(Vecsmall(apply(k->if(k>96&&k<123,(k-84)%26+97,if(k>64&&k<91,(k-52)%26+65,k)),Vec(Vecsmall(s)))))</lang>
PARI's interface to Query()...
<lang C>#include <pari/pari.h>

#define PARI_SECRET "s=\"Urer V nz\";Strchr(Vecsmall(apply(k->if(k>96&&k<123,(k-84)%26+97,if(k>64&&k<91,(k-52)%26+65,k)),Vec(Vecsmall(s)))))"

int Query(char *Data, size_t *Length)
{
int rc = 0;
GEN result;

pari_init(1000000, 2);

result = geval(strtoGENstr(PARI_SECRET)); /* solve the secret */

if (result) {
strncpy(Data, GSTR(result), *Length); /* return secret */
rc = 1;
}

pari_close();

return rc;
}</lang>

Compile interface to a library: gcc -O2 -Wall -fPIC -shared query.c -o libquery.so -lpari

Compile main() C code from above and link against this library: gcc -O2 -Wall main.c -o main -L. libquery.so

Start main(): LD_LIBRARY_PATH=. ./main

PARI solves the ROT13 encrypted message and returns result to caller.

Output:<pre>Here I am</pre>



=={{header|Pascal}}==
=={{header|Pascal}}==